?

Log in

Почему 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: permea_kra
2011-01-14 09:45 pm (UTC)
>>Mathematica
Никогда не имел дела. Из всего этого общался только с маткадом, и показал он себя... говно-говном, в общем-то, хотя графики рисует красиво.

>Как буд-то interact спасет от йобли с тайпчекером
С тайпчекером ебуться только извращенцы. Он используется для проверки контрактов операций. IO - такой контракт, достаточно простой. И таки да, если стоит задача избежать 'ебли с тайпчекером' по поводу IO, то в случае говноподелки-фильтра - спасает.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-15 04:41 am (UTC)
> Из всего этого общался только с маткадом, и показал он себя... говно-говном

Да-да. Маткад - говно-говном, а вот ghci - предел совершенства. Даже не смешно, в самом-то деле.

> С тайпчекером ебуться только извращенцы.

Я всегда знал, что все, кто пишет на хаскеле - извращенцы.

> И таки да, если стоит задача избежать 'ебли с тайпчекером' по поводу IO, то в случае говноподелки-фильтра - спасает.

Не спасает. Ты не понимаешь очевидного - если ты пишешь даже простейшую программу с ИО, то это ИО туда можно ввести сотней различных способов, и вероятность того, что человек, который впервые пишет на лиспе, сможет из этой сотни способов выбрать тот, в котором количество йобли минимально - ноль. Потому хаскель и является языком с одним из самых высоких порогов вхождения - здесь даже для того, чтобы понять, как работает хелловорд, надо разбираться в системе типов, знать сотню функций из стандартной библиотеки для работы с монадами/функторами, знать во что раскрывается do-нотация и так далее.
(Reply) (Parent) (Thread)
[User Picture]From: permea_kra
2011-01-15 06:22 am (UTC)
>Маткад - говно-говном, а вот ghci - предел совершенства.
Да нет, в общем-то. Но всякие штуки с последовательностями проще считать в ghci.

>если ты пишешь даже простейшую программу с ИО, то это ИО туда можно ввести сотней различных способов,
interact :: (String -> String) -> IO ()
The interact function takes a function of type String->String as its argument. The entire input from the standard input device is passed to this function as its argument, and the resulting string is output on the standard output device. (c) Prelude
Это, если че, стандартная библиотека, которая
а) стандартизирована
б) описывается первым делом.

Это во-первых. Во-вторых, ебли с тайпчекером при работе с IO - ноль. Откуда ей там взяться? Либо ты можешь делать IO в функции, либо нет. Если нет - ну извини, но какого хрена ты в неё лезешь с IO ? Если да, то где ебля?

Короче, все отмазы про еблю с тайпчекером - гнилые. Лень ещё один язык учить - ну так и признайтесь.
(Reply) (Parent) (Thread)
From: ext_55374
2011-01-15 11:14 pm (UTC)
> Откуда ей там взяться?

Я думаю, автор имеет в виду это:

Prelude Data.List> let t = readFile "/tmp/1"
Prelude Data.List> t
"Hello world\n"
Prelude Data.List> :t t
t :: IO String
Prelude Data.List> words t

:1:6:
Couldn't match expected type `String'
against inferred type `IO String'
In the first argument of `words', namely `t'
In the expression: words t
In the definition of `it': it = words t
(Reply) (Parent) (Thread)
[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)