?

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:
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)
From: (Anonymous)
2011-01-15 12:35 pm (UTC)
> Смотря в каком контексте.
В любом контексте чекер скушает, потому что результат `+` - это number, и если f можно применить к (x + y), то к x ее тоже можно будет применить.

> С какой стати мне врать? Мне неизвестно языка, имеющий хотя бы отдаленно сравнимый с хаскелем по читабельности код.

Да куча языков, в котором нету такого количества синтаксического сахара. + всякий арт из разряда <*> (опять ипаные функторы, ага, ну кому пришло в голову, что ((+) <$> [1,2] <*> [3,4]) читабельнее, чем (map + `(1 2) `(3 4))?), которые приходится пихать вместо банальной аппликации, добавить к этому отсутствие скобок (учим таблицу приоритета инфиксных операций, которых овер 9000) и принудительный карринг - в результате приходится парсить - а что к чему тут вообще применяется? Дело ведь в чем - после некоторой привычки глаз все эти вещи уже сам "цепляет" и все понятно. Но мы же о пороге вхождения говорим? То есть о том, как это выглядит для человека, у которого взгляд еще не привык. Ах, это я, кстати, еще point-free головного мозга не упомянул.
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-15 02:42 pm (UTC)
>учим таблицу приоритета инфиксных операций, которых овер 9000

Это ваши личные проблемы, если что. Типы ограничивают возможности применения.

К тому же инфиксная запись привычней и понятней любой другой. Это к вопросу о пороге вхождения.
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-15 02:46 pm (UTC)
>кому пришло в голову, что ((+) <$> [1,2] <*> [3,4]) читабельнее, чем (map + `(1 2) `(3 4))?

Тому, кто видит не только списки.

Как честный человек не могу не упомянуть о более привычной форме определения функции в виде таблицы сравнения с образцом или охраняющих условий. Если сравнивать пороги вхождения, опять же.
(Reply) (Parent) (Thread)
[User Picture]From: permea_kra
2011-01-15 05:26 pm (UTC)
>>В любом контексте чекер скушает, потому что результат `+` - это number, и если f можно применить к (x + y), то к x ее тоже можно будет применить.

не в любом. Если f :: a -> b

то \x y -> f x + y :: Num b => a -> b -> b,

но \x y-> f (x+y) :: Num a => a -> a -> b

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

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

>>добавить к этому отсутствие скобок
Не будем. Они есть и их можно использовать.

>>учим таблицу приоритета инфиксных операций, которых овер 9000
Не учим. Если что-то надо, всегда можно подсмотреть в ghci или поставить скобки.

>>((+) <$> [1,2] <*> [3,4])
Ну так перепишите как положено, а не как восторженный неофит функторов: zipWith (+) [1,2] [3,4] .


>>Но мы же о пороге вхождения говорим?
Порог вхождения - нулевой. Не обязательно ползоваться ВСЕМИ возможностями языка, чтобы иметь все его плюшки.






(Reply) (Parent) (Thread)
From: ext_55374
2011-01-15 11:29 pm (UTC)
>>((+) <$> [1,2] <*> [3,4])
> Ну так перепишите как положено, а не как восторженный неофит функторов: zipWith (+) [1,2] [3,4] .

Ващета

> (+) <$> [1,2] <*> [3,4]
[4,5,5,6]
(Reply) (Parent) (Thread)
[User Picture]From: permea_kra
2011-01-16 07:31 am (UTC)
Ну [ a + b | a <- [1,2], b <-[2,3] ] . Не принципиально в данном аспекте.
(Reply) (Parent) (Thread)
[User Picture]From: voidex
2011-01-16 01:20 am (UTC)
liftM2 (+)
(Reply) (Parent) (Thread)
[User Picture]From: max630
2011-01-15 10:13 pm (UTC)
> хаскиле просасывает по читабельности

пардон, это ru_lisp?
(Reply) (Parent) (Thread)
From: ext_55374
2011-01-15 10:56 pm (UTC)
How to patch Gnome under AIX, да.
(Reply) (Parent) (Thread)