А ты писал ГУИ на питоне? А? Питон лучше только для обучения красноглазых детей. А для писания ГУИ я лучше perl выберу (хотя в идеале - tcl). Для разработки всяких веб-интерфейсов - опять перл. Питон - кака. Я его презираю :)
а кто сказал, что сложнее? я так не говорил. а почему перл - гадость? имхо, хороший язык. а про другие замечательные языки я знаю. но в топике - перл и питон, поэтому я про них и писал (tcl - к слову)
>И это полезная конструкция? lol
ну скриптописателям это не понять - а так сравни.
switch(state){
case BUSY:
<some code>
break;
<other states>
default:
<some code>
break;
}
if(state==BUSY){
<some code>
} else if (state==OFF)
<и еще куча if>
else{
<some code>
}
во первых выглядит лучше, во вторых подумай как работает.
представь что это конечный автомат у которого состояний 32?
>да, возможно. действительно, было бы лучше, если бы была строгая типизация данных
Дело даже не в этом. Нет возможности конструировать свои типы данных. Мне вот однажды понадобились типы данных:
* целое число в системе счисления по основанию 3;
* рациональная дробь.
Плюсь, конечно, возможность создания операторов, работающих с этими данными.
Ну и как такое в перле сделать?
>eval
Мне нужно определить параметризованное исключение, параметром которого является (что случилось, степень тяжести ошибки). И в логике программы оно должно это искличение отлавливать, и в зависимости от параметра вызывать функции f_problems(degree_of_error). Представь пожалуйста код на перле, который это делает.
>уществуют соглашения о стиле, и хорошие программисты обычно их придерживаются. если они не задались целью написать очередной япх.
А ещё существуют уёбки, которые ищут кайфа в писании таким стилем, что без бутылки не разберёшь. (комментарии они конечно тоже не пишут) И ведь нет никаких объективных причин, что бы так писать. Место они что--ли на жёстком диске экономили. Лучеб они экономили моё время.
> Дело даже не в этом. Нет возможности конструировать свои типы данных. Мне вот однажды понадобились типы данных:
> * целое число в системе счисления по основанию 3;
> * рациональная дробь.
> Плюсь, конечно, возможность создания операторов, работающих с этими данными.
> Ну и как такое в перле сделать?
> >eval
> Мне нужно определить параметризованное исключение, параметром которого является (что случилось, степень тяжести ошибки). И в логике программы оно должно это искличение отлавливать, и в зависимости от параметра вызывать функции f_problems(degree_of_error). Представь пожалуйста код на перле, который это делает.
Perl CookBook хотя бы прочитай, да. Может поменьше тогда идиотских утверждений будет. Запарили рассуждения о языке суахили...
Предоставь код на перл определяющий вышеописанные структуры данных и операторы для работы с ними, и обработку исключений с pattern match'ином не забудь.
Есть у меня знакомый - перл-обезьянка, так с ним говорить против перла бесполезно, если только в репу кулаком ему стукнуть, то можно переубедить, но не все так просто подошел еще к одному знакомому, так он оказался ярым лемуром-питонщиком, как он мне доказывал про ГУИ или логику, что писец просто, но как-то фанатично, вот хорошо бы их лбами столкнуть...
А так ребята пишите ГУЙ на чем хотите, лишь бы вовремя и работало, а мы посмотрим сколько вам зарплаты выдать, работайте!
ugoday, при всём моём уважении - ты порешь чушь. Perl - язык замечательный, но предназначен всё-таки для определённого круга задач. Для более глубокого осознания этого факта предлагаю тебе написать решения предложенных тобой задач на SQL. Или на Prolog.
PS Python в глаза не видел, отталкивает синтаксическая значимость отступов. Были бы фигурные скобочки...
> Perl - язык замечательный, но предназначен всё-таки для определённого круга задач.
0. Для каких?
1. Убеждён, что хороший яп должен быть масштабируемым. Т.е. Нужен тебе простенький конфиг отпарсить --- вот тебе регекспы и хватит тебе. Нужно решить что--либо более сложные --- бери автоапликативные функционалы, макросы, свои типы данных, рекурсии высшего порядка и многое другое.
2. А свои типы данных делают программирование более быстрым и надёжным. Программа при этом выглядит более читабельной. А значит стоимость сопровождения резко уменьшается.
3. PS Python в глаза не видел, отталкивает синтаксическая значимость отступов. Были бы фигурные скобочки..
0. Не фигурные, а круглые. ;)
1. Посмотри. Там смотреть нечего, так что за 2 часа всё выучишь.
2. Непонятно что хотел сказать Гвидо создавая этот язык. В нём нет ни одной новой идеи. Ниша языка полностью покрывается лиспом. Это же верно и для перла.
Интересен вопрос: почему для перла создан CPAN, количество модулей в котором многократно превосходит количество лисповых библиотек?
Я думаю что это из--за особой кривизны перла, из--за того что он является сборищем заплаток, наложенных на кучу костылей. Действительно, если на каждый чих требуется свой костыль (который вдобавок проблематично написать), то логично собрать все костыли в центральное храшилище. Т.е. cpan решает проблемы, которые в лиспе просто не возникают.
Возможно существует модуль для работы с рациональными дробями. Это послужит подтверждением тезиса.
да что разговаривать с человеком, который заявляет о невозможности создания свох типов данных...понятие объектно ориентированный язык тебе о чём нибудь говорит?
>PS Так как насчёт рациональных дробей на SQL?
0. Честно говоря sql я знаю на уровне selec/insert/delete. Т.е. можно ли там сделать рацдроби на sql я не знаю.
1. Sql --- узкоспециализированный язык. Зачем в нём дроби?
2. Про перл такое сказать нельзя. Перл --- язык общего назначенея.
>Э... а как там у вас в лиспе с регулярными выражениями
Великолепно. Просто замечательно.
$ apt-cache show cl-regex
Поскипано
Description: Common Lisp regular expression compiler/matcher
A fully-featured regular expression compiler and matching engine for
Common Lisp that claims to be roughly 5x-20x times faster than the GNU regex matcher written in C.
Надеюсь вы не думали, что в лиспе нет регулярных выражений?
>и рациональными дробями? Глазами на это посмотреть можно?
0. С рац. дробями тоже всё прекрасно. Прошу обратить внимание на то, что для этого не надо создавать отдельный костыль. Всё делается легко и изящно.
1. По моему очевидно использовать представление дробь = пара, типа (числитель . знаменатель). Всё остальное легко
2. mkdrob --- создаёт дробь
(define (mkdrob chisl znam) (cons chisl znam))
3. Замечаем что (mkdrob 4 6) создаст пару (4 . 6). Это некрасиво. Чтобы это исправить нам нам нужна функция, ищущая наибольший общий делитель. В школе (7 класс кажется) мы искали его так
(define (findnod x y)
(if (= y 0)
x
(findnod y (remainder x y))))
remainder --- остаток от деления
4. Тогда функция mkdrob преобразится в
(define (mkdrob chisl znam)
(let ((nod (findnod chisl znam)))
(cons (/ chisl nod) (/ znam nod))))
5. теперь (mkdrob 4 6) создаст пару (2 . 3)
6. Создадим функции складывающии и вычетающии дроби: sumdrob и minusdrob.
7. Для этого создадим более абстрактную функцию smdrob
(define (smdrob action drob0 drob1)
(mkdrob
(action
(* (getchisl drob0) (getznam drob1))
(* (getchisl drob1) (getznam drob0)))
(* (getznam drob0) (getznam drob1))))
8. Тогда sumdrob и minusdrob очевидно записываются как
(define (sumdrob drob0 drob1) (smdrob + drob0 drob1))
(define (minusdrob drob0 drob1) (smdrob - drob0 drob1))
9. А теперь создадим функцию умножающую дроби mnojdrob
(define (mnojdrob drob0 drob1)
(mkdrob
(* (getchisl drob0) (getchisl drob1))
(* (getznam drob0) (getznam drob1))))
A. Для функции деления deldrob создадим вспомогательную функцию, делящую еденицу на дробь invdrob
(define (invdrob drob) (mkdrob (getznam drob) (getchisl drob)))
B. Теперь создадим deldrob
(define (deldrob drob0 drob1) (mnojdrob drob0 (invdrob drob1)))
C. Теперь у нас есть функции: создающие дроби и производящии с ними 4 арифметические действия.
D. А теперь сравни мой ответ, с ответами моих оппонентов.
E. Книжку, ссылки на которые мне давали, я давно читал. Из того что перл --- тьюринг полный следует, что и рац дроби на нём можно сделать, и кортеж определить, и определить параметризованное исключение, параметром которого является кортеж.
F. Почему же СуТкИ мне так и не предоставили кода? Потому что тяжело всё это делается, через жопу с дыркой калибра 7.6.
10. Опять же десяток правило Гринспуна.
>Где перегрузка +, -, *, / для созданных "дробей"?
0. (define p +)
1. (define (sumdrob x y)
(mkdrob
(p
(* (getchisl x) (getznam y))
(* (getchisl y) (getznam x)))
(* (getznam x) (getznam y))))
2. (define + sumdrob)
3. (define a (mkdrob 1 2))
4. (define b (mkdrob 1 3))
5. (+ a b)
;Value 1: (5 . 6)
6. с остальными действиями --- аналогично.
>Как ты планируешь отличать свои дроби от любой другой пары?
Возможжно два варианта. "любая другая пара" имеет тип:
0. (число . число). Тогда нет смысла отличать её от пары созданной
mkdrob
1. другое. Тогда при попытке произвести с ней действия интерпретатор
скажет: "Ша!" и это отличит её от корректной пары.
>Ты ж замолчал. Я и подумал, что устыдился ugoday, побежал самообразовываться. А ты вишь - трепыхаешься еще.
От делать мне нечего --- целый день на лоре зависать. Ждать ответит мне кто--нибудь или нет.
P.S. Давай перенесём дискуссию на новый уровень.
0. Ты таки разродишься кодом.
1. Я скажу: "давненько я не видел такого уродства" и предложу проверить наши дроби в действии: создать простенькую систему эти самые дроби упрощающие.