Zorko писал(а):
Моя реакция же вызвана тем, что ты навязываешь мне Хаскел. Хотя он мне не подходит и не нужен.
Я навязываю? о_О Да если и навязываю, то не больше чем ты навязываешь обероны и родноверие...
Zorko писал(а):
И, видимо, не только мне, раз тебя прозвали на оберспейсе "хаскел-бой".
Это кто же меня так "прозвали"? Некий неадекват по имени Пётр Кузьмицкий? Кто ещё?
Zorko писал(а):
Но я понимаю: ты так самоутверждаешься.
О, да ты психолог. Не думал сменить род занятий? )))
Zorko писал(а):
Если я пойду на форумы по Хаскелу навязывать им Оберон, я буду ровной в той же роли, что и ты здесь. И могу не удивляться реакции, которую там вызову.
Хаскеллеры в этом плане куда толерантнее оберонщиков, так что особой реакции ты там не вызовешь, имхо.
Zorko писал(а):
P.S. Значит в Хаскеле else обязательное? Это ещё что за изврат?
А если не надо? Всё равно пользуй?
Это не изврат. Просто в Хаскелле нет операторов, соответственно нет и оператора if-then.
А если нет операторов, а всё является выражением, то и if-then-else тоже является выражением, и, как и всякое выражение, должно вернуть результат, причём в выражении if-then-else возвращается один из двух результатов, оба из которых должны иметь один и тот же тип.
В этом плане по семантике хаскельное if-then-else похоже на сишную тернарную операцию ?:
Если тебе вдруг не надо выполнять альтернативное действие в операторе IF (то есть часть ELSE не нужна), значит речь идёт об императивных действиях ввода/вывода или изменения состояния.
Конкретно в хаскелле, подобные вещи тоже могут быть нужны в тех частях программы, что ответственны за действия вввода/вывода. В этом случае используются предопределённые в стандартной библиотеке функции when и unless, и этот код будет выглядеть примерно так:
when водкаВечером $ do рассолСУтра
Zorko писал(а):
P.P.S. Я могу продолжить критику уже сего рулезного "==", но
это всё ж уже блин и так расписано по самое небалуйся.Не путай си и хаскель. В сях ты можешь изменить содержимое переменной внутри проверки условия, в хаскелле это невозможно -- система типов не позволит. Мне тоже не особо нравится "==", но чем его заменить тогда? Ведь символ "=" занят под объявление констант, функций, типов. Вот и пришлось использовать знак "==", который благодаря сишным языкам весьма известен.
Точно так же мне не нравятся операции &&, ||, и мне непонятно, почему Вирт в Оберонах и Модуле-2 ушёл от операций NOT, AND, <> в пользу птичьих закорючек ~, & и #.