?

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: permea_kra
2011-01-14 09:43 am (UTC)
>у действительно продвинутых калькуляторов
Это которые?
>вылезает IO
Prelude.interact .
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-14 12:02 pm (UTC)
> Это которые?

Mathematica, например.

> Prelude.interact .

Как буд-то interact спасет от йобли с тайпчекером, когда попытаешься что-то написать с ио. Вот банальный пример - считать сперва длину списка, а потом список соответствующей длины. У нас этот список будет IO (LIST ...), и теперь чтобы с ним работать тебе обеспечена либо do-нотация, либо mapM и прочее говно, либо вообще >>=/>>/return руками. Очень низкий порог вхождения, очень.
(Reply) (Parent) (Thread)
[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) (Expand)
(no subject) - (Anonymous) Expand
From: (Anonymous)
2011-01-14 12:05 pm (UTC)
Ах, да, еще ошибки типа "где-то в вашем коде вместо типа %простыня_текста% тип %другая_простыня_текста%, вы хам и пидорас, месье, я не стану компилировать вашу программу" тоже очень снижают порог вхождения.
(Reply) (Parent) (Thread)
[User Picture]From: permea_kra
2011-01-14 09:47 pm (UTC)
В общем, да. Поскольку, в отличии от перла, не приходиться чесать в затылке и искать, где ты забыл скобки поставить.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-15 04:35 am (UTC)
> Поскольку, в отличии от перла, не приходиться чесать в затылке и искать, где ты забыл скобки поставить.

Ну так и надо говорить, что код на хаскиле просасывает по читабельности у всего, за исключением разве что перловских однострочников. Хотя, кстати, ложь - тайпчекер от ошибок вида "забыл поставить скобки" не спасает, например f x+y - чекер скушает, а оказывается, что ведь надо было f (x+y)...
(Reply) (Parent) (Thread)
[User Picture]From: permea_kra
2011-01-15 06:16 am (UTC)
>Ну так и надо говорить, что код на хаскиле просасывает по читабельности у всего, за исключением разве что перловских однострочников.

С какой стати мне врать? Мне неизвестно языка, имеющий хотя бы отдаленно сравнимый с хаскелем по читабельности код. Факт в другом - поскольку пишут на этом языке зачастую высоколобые с исследовательскими целями, они порой используют, эээ, нетривиальные подходы в дизайне.

>например f x+y - чекер скушает, а оказывается, что ведь надо было f (x+y)...
Смотря в каком контексте. В не-дегенеративных случаях такие штуки тайпчекером различаются.

(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
[User Picture]From: max630
2011-01-15 10:13 pm (UTC)
> хаскиле просасывает по читабельности

пардон, это ru_lisp?
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: max630
2011-01-15 10:14 pm (UTC)
ну, строго говоря, довольно часто причиной такой ситуации становится именно непроставленная скобка
(Reply) (Parent) (Thread)
[User Picture]From: vanja_y
2011-01-15 09:48 pm (UTC)
Matematica на которую ссылается аноним штука на мой взгляд уродливая и громоздкая, но очень раскручена среди прикланых математиков в университетах. По идее она являтся разновидностью векторного языка с нотацией максимально приближенной к математической. Я со своей колокольни предпочитаю J от jsoftware.
(Reply) (Parent) (Thread)