?

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:20 am (UTC)
У хаскеля входной порог для написания полезных программ нулевой. Потому что в нем есть ghci и его вполне можно использовать как продвинутый калькулятор. Для свистоподелок он вполне заменяет perl, но дает какие-то проверки корректности.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-14 09:32 am (UTC)
В качестве продвинутого калькулятора ghci сосет у действительно продвинутых калькуляторов, а при попытке написания любого приложения вылезает IO, которое и поднимает порог вхождения на недосягаемые высоты по сравнению с другими языками.
(Reply) (Parent) (Thread)
[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)
From: va_sav
2011-01-14 10:04 am (UTC)
?

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

Порог вхождения - это скорее совокупность знаний и различных деталей, которые приходится держать в голове, чтобы написать не совсем тривиальную программу на выбранном языке. Типичный пример языка с очень низким порогом вхождения - PHP.
(Reply) (Parent) (Thread)
[User Picture]From: permea_kra
2011-01-14 10:09 am (UTC)
>совокупность знаний и различных деталей, которые приходится держать в голове, чтобы написать не совсем тривиальную программу на выбранном языке. Типичный пример языка с очень низким порогом вхождения

Хаскелл. Объективно. Ниже только у перла.
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 07:20 am (UTC)
Неправда. Я на схеме начал писать через 20 минут.
На Хаскелле пробовал несколько часов - писать не могу, более того, не понимаю кода из туториалов (впрочем, нередко код из туториалов не встречает понимания и у ghc, собственно, ещё один минус).
(Reply) (Parent) (Thread)
From: va_sav
2011-01-17 06:22 am (UTC)
Вот-вот. Нечто подобное не раз наблюдал на студентах. А коды в учебниках, которые не понимаются ни интерпретатором, ни компилятором - это вообще достижение Haskell - как в анекдоте: "Понижение цен на отсутствующие в продаже товары было политически правильной мерой, хотя экономического эффекта не имело."
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-18 08:47 am (UTC)
Haskell - развивающийся язык, в котором и добавляются полезные (вообще, разные) вещи, и убираются ненужные.

Например, я наткнулся на невозможность сборки некоего проекта под свежей версией GHC - изменились библиотеки.

Кстати, я прошу привести мне такой учебник, где приведён неправильный код.

Взамен я приведу в пример учебник, где код правильный.
(Reply) (Parent) (Thread)
[User Picture]From: migmit
2011-01-17 09:28 am (UTC)
Я на хаскеле начал писать через полчаса. На лисповых диалектах пробовал много раз, не врубаюсь совершенно, а код из туториалов не могу прочесть.
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-16 11:13 am (UTC)
Товарищ grundik опирается в своих выводах только на свой единичный опыт, всё остальное ему безразлично.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-19 02:19 pm (UTC)
И единичного опыта достаточно, чтобы усомниться в объективности обсуждаемой оценки порога вхождения
(Reply) (Parent) (Thread)