?

Log in

No account? Create an account
Почему LISP? - Жить не можем без проблем! [entries|archive|friends|userinfo]
Жить не можем без проблем!

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Почему LISP? [Jan. 13th, 2011|02:05 pm]
Жить не можем без проблем!

ru_lisp

[aralex]

Как говорил Ворошилов, вопрос к Знатокам (к знатокам LISP-а в данном случае)! Почему таки LISP? Или, если конкретнее, вопроса три:

  1. Для каких именно задач LISP подходит больше, чем другие языки?
  2. За счёт чего для них он подходит больше?
  3. В чём именно выражается его преимущество?

Если не в лом, приведите, pls, коротенькие иллюстрации на LISP-е (или ссылочку на них). Заранее благодарен!

Исходно данный пост был размещён в сообществе ru_programming, но там Знатоков, способных ответить внятно и по сути, увы, не нашлось :(

linkReply

Comments:
[User Picture]From: thesz
2011-01-15 10:57 am (UTC)
>знать сотню функций из стандартной библиотеки для работы с монадами/функторами

Слабо перечислить необходимые для Hello, world функции?
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-15 12:21 pm (UTC)
Очевидно же, что имелся в виду не конкретно хелловорд, а любая достаточно простая программа. В любом случае, функторы/монады в хаскеле - это базовая вещь, без них именно что только и можно print "Hello, World!" написать, а если что-то сложнее - надо разбираться.
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-15 01:59 pm (UTC)
>Очевидно же, что имелся в виду не конкретно хелловорд, а любая достаточно простая программа.

Как вы думаете, сколько монад и функторов было в моей модели процессора MIPS с внеочередной выдачей команд? Сколько вообще монадического кода (в процентах) было в этой большой программе?

Функторов - ни одного. Монад - две штуки, в разборе ассемблера и в области выдачи команд (о чём я позже пожалел и другие блоки делал в обычном функциональном стиле). Процент монадического кода в самой модели - менее 20% (а если бы я не использовал State монаду, то вообще было бы процентов 5).

Так вот, на основе моего опыта самостоятельной работы с Хаскелем и опыта выдачи заданий написать/расширить программу на Хаскеле другим программистам разного опыта, я могу утверждать, что для программирования на Хаскеле знания монад не требуется. Как выполнять ввод-вывод - требуется знать, всё остальное - аксиомы, куда и во что разворачивается do-запись - нет.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-15 02:28 pm (UTC)
У меня такое чувство, что вы не следите за ходом разговора. Речь шла о пороге вхождения, то есть о том, что у человека, впервые увидевшего хаскель, есть миллион способов превратить программу в кучу монадического говнокода. Безусловно, есть способы не превращать - но их намного меньше.

> Функторов - ни одного.

Учитывая, что в хаскеле практически все - инстанс функтора, я предположу, что вы лукавите. Хотя я допускаю, что такая ситуация могла возникнуть в силу специфики задачи.

> Как выполнять ввод-вывод - требуется знать, всё остальное - аксиомы, куда и во что разворачивается do-запись - нет.

Безусловно, вы сможете без знания этого всего что-то написать, но после первой же ошибки в типах - конец всему веселью. Без полного понимания того, как работают >>=/>>, и во что разворачивается do-нотация, никакая отладка программы невозможна - сообщения компилятора об ошибках типов будут для вас полнейшей абракадаброй и исправлять вы их сможете исключительно методом научного тыка. Это - строгий минимум, еще неплохо было бы знать, как работает алгоритм тайп инференса, а то автовывод типов без контроля программиста тоже весьма чреват.
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-15 02:39 pm (UTC)
>У меня такое чувство, что вы не следите за ходом разговора.

Ваше чувство вызвано тем, что я вижу передергивание и не собираюсь ему поддакивать. Вот это отсутствие поддакивания вы и воспринимаете, как отсутствие слежения за ходом разговора.

Вы столкнулись с человеком, пишущим на Хаскеле уже 12 лет, зарабатывающим на жизнь Хаскелем, вот уже на двух работах, и выдававшим задания "написать программу на Хаскеле" другим людям. Будьте добры, учитывайте это впредь.

>Речь шла о пороге вхождения

Не такой уж он и высокий.

>то есть о том, что у человека, впервые увидевшего хаскель, есть миллион способов превратить программу в кучу монадического говнокода. Безусловно, есть способы не превращать - но их намного меньше.

Будьте добры, не говорите глупости. "Порог вхождения" не является эквивалентом "миллиону способов превратить программу".

>Учитывая, что в хаскеле практически все - инстанс функтора, я предположу, что вы лукавите.

Судя по всему, вы вообще не знаете Хаскеля.

Простой вопрос: имеет ли тип Bool реализацию Functor? А операция case?

>Без полного понимания того, как работают >>=/>>, и во что разворачивается do-нотация, никакая отладка программы невозможна - сообщения компилятора об ошибках типов будут для вас полнейшей абракадаброй и исправлять вы их сможете исключительно методом научного тыка.

Какая глупость. Я проводил опыты над ничего не подозревающими людьми, это совсем не так.

>Это - строгий минимум, еще неплохо было бы знать, как работает алгоритм тайп инференса, а то автовывод типов без контроля программиста тоже весьма чреват.

И тут то же самое.

Кстати, а не затруднит ли вас представиться? Чтобы страна знала своих героев.
(Reply) (Parent) (Thread)
[User Picture]From: voidex
2011-01-15 10:02 pm (UTC)
> у человека, впервые увидевшего хаскель, есть миллион способов превратить программу в кучу монадического говнокода.
Однако в Хаскеле мы сразу увидим монадическое говно, оно там явно помечено. В других языках мы вынуждены мириться с этим говном, потому что каждый мудак впихивает ввод-вывод где попало без всяких последствий, кроме отложенных административных.
(Reply) (Parent) (Thread)