?

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: thesz
2011-01-16 12:29 pm (UTC)
>Более того, если решать со стороны receiver-а, то некоторые трюки перестают работать (это когда в процессе вычисления аргументов происходят сайд-эффекты). Ну то есть это другой язык получается уже.

Прошу показать, как это получается.
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 01:06 pm (UTC)
Псевдокод тупого примера:

функция A(x): записать x в файл Z, вернуть x
функция sum(): возвращает сумму аргументов

sum(A(5) + A(6) + A(7))

Когда у нас говорится, что порядок вычислений аппликативный, и что компилятор вычисляет слева-направо, то в файле получим "567".

Если A будет сама вычислять свои аргументы, то что мы получим в файле - хз, зависит от конкретной функции А.


То, что так делать нельзя из-за майнтенабилити - это вопрос совсем другой. Подобного рода "решения" я видел в реальности, в промышленном коде. На лиспе тоже видел (ну, на всяких лиспах, особенно на common lisp, говнокода написано немало, да).

Более хитрый пример можешь сам придумать :)
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 01:07 pm (UTC)
ой фак, зачем я написал плюсы?

sum(A(5), A(6), A(7)) - вот так надо же.
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-16 01:21 pm (UTC)
В противовес - Id90, lenient reduction order (среднее между ленивым и энергичным, аргументы могут вычисляться как угодно), LazyML, Miranda, Hope.

Все ЯП с порядком упрощения, отличным от энергичного. Везде были способы писать программы, пишущие в файл.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-16 03:43 pm (UTC)
К слову, в Scheme порядок вычисления аргументов неспецифицирован, так что в файле будет все, что угодно (в смысле любая перестановка "567").
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 03:51 pm (UTC)
Есть стандарты, а есть реализации ;)

(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-16 04:12 pm (UTC)
Во время некоторых оптимизаций порядок вычисления аргументов вполне может измениться.
(Reply) (Parent) (Thread)