?

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: thesz
2011-01-16 10:02 am (UTC)
Алан Кей считает иначе, как минимум, насчёт семантики.

Кому из вас верить?
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 10:50 am (UTC)
Ты сам проверь ;)

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

Ну и это, ты опять троллишь :) А именно выдаёшь свою интерпретацию слов Кея за его слова. А он ведь не говорил того, что Хаскель проще Лиспа в семантике.

Плюс товарищ Кей говорит про Лисп-2, при этом не обращая внимания на то, что есть (хотя, возможно, в то время его не было) Лисп-1 (это к вопросу о том, насколько критики Лиспа вообще в нём разбираются). Опять же, называть лисп функциональным языком есть ошибка (или сознательный троллинг). Лисп мультипарадигменен, и функционален он не больше, чем императивен или ООП-шен.

И последнее. Судя по всему, Кей говорит не про Common Lisp, а про какой-то другой лисп. Это тоже распространённый fail в спорах о лиспе, ибо лиспов дохренища, и между собой они заметно отличаются. И часто те недостатки, что есть в Common Lisp, отсутствуют, например, в scheme (или в Racket).
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-16 11:06 am (UTC)
>Ну и это, ты опять троллишь :) А именно выдаёшь свою интерпретацию слов Кея за его слова. А он ведь не говорил того, что Хаскель проще Лиспа в семантике.

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

Правильно ли я интерпретирую его слова сейчас?

Будешь ли ты утверждать, что специальные формы и макросы не имеют отношения к семантике Лиспа?
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 12:16 pm (UTC)
0. По-моему он просто сказал, что не понимает, зачем необходимо иметь два порядка вычислений в одном языке.
1. Я не вижу в этом серьёзного упрощения (плюс не забываем об обратной стороне, а именно о сложности компилятора). Более того, если решать со стороны receiver-а, то некоторые трюки перестают работать (это когда в процессе вычисления аргументов происходят сайд-эффекты). Ну то есть это другой язык получается уже.
2. Даже если согласиться с Кеем, из этого не следует, что сейчас Лисп сложнее Хаскеля в понимании.


PS: не сказать бы, что я не согласен с Кеем, вообще очень всё логично он говорит, но раз ты за него, то я буду против, да :)
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
From: (Anonymous)
2011-01-16 03:41 pm (UTC)
> Вообще-то, он сказал, что упрощение Лиспа со всеми его макросами и специальными формами возможно за счёт изменения порядка вычислений на ленивый.

При всем уважении к Алану Кею - мало ли, что он сказал? Вот если бы он предоставил научную работу с семантикой lazy-lisp, из которой четко следует, что, ага, все стало проще - был бы другой разговор, а пока это только пустопорожний треп о том, что ему показалось. Да, пару спецформ можно было бы исключить, что упростило бы семантику, но это все. Семантика макросов в данном случае никак не упрощается, как и семантика оставшихся спецформ, зато вот некоторые вещи были бы очень веселыми. Например (let ...)-формы. В ряде диалектов let выражается через lambda, если биндинги в let обрабатываются лениво, то поведение формы будет совершенно алогичным, значит надо что? Правильно - вводить let-спецформой, отлично, хорошо, годно упростили семантику, спецформы не было - пришлось ввести, и это только один тривиальный пример.
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
[User Picture]From: thesz
2011-01-16 11:07 am (UTC)
>И последнее. Судя по всему, Кей говорит не про Common Lisp, а про какой-то другой лисп. Это тоже распространённый fail в спорах о лиспе, ибо лиспов дохренища, и между собой они заметно отличаются. И часто те недостатки, что есть в Common Lisp, отсутствуют, например, в scheme (или в Racket).

А вот теперь ты уводишь разговор в сторону.

Присутствует ли указанный Кеем недостаток в Scheme, CL и других известных тебе Лиспах? Присутствуют ли там макросы и специальные формы?
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 12:09 pm (UTC)
Если честно, я вообще не понял, что конкретно не нравится Кею, кроме того, что по записи (qwe a b c) нельзя сказать, что такое qwe и когда будут вычисляться a, b и с - до передачи в qwe или после.

Макросы и спецформы есть в любом лиспе (ибо какой же лисп без них), однако Кей, по-моему, комплейнит не на их наличие, а на наличие "обычных" функций, аргументы которых вычисляются перед передачей в функцию. Ну то есть он комплейнит на аппликативный порядок вычислений.

Итого, отвечая на твой вопрос - ленивые лиспы существуют, да. Например, Lazy Racket. Судя по документации, реализовано как раз так, как спрашивает Кей.


Но вообще, конечно, можешь это моё замечание засчитать за демагогию/троллинг, ога. Но напомню, у меня там оно не одно.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-16 11:10 am (UTC)
То, что лисп мультипарадигменный - заблуждение, если только не считать способы декомпизиции (функциональная, объектная и т.д.) парадигмами, ну а тогда все языки мультипарадигменные. Парадигма там одна - императивное программирование. Декларативно в лиспе писать нельзя (нет, в теории можно встроить декларативный язык, но на практике никто так не делает и делать не будет, потому как все библиотеки императивные и вообще инфраструктура не способствует), а вот Хаскель поддерживает обе парадигмы.
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 11:48 am (UTC)
Ээээ... На лиспе можно писать так, как хочется.
Декларативно - это как, по-вашему? Как в прологе? Lisa работает, я проверял.

Но в общем неважно. Важно, что лисп не функциональный язык.
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
[User Picture]From: love5an
2011-01-17 03:43 pm (UTC)
ой, блядь.
ну вот это такая хуйня, что я пройти мимо не могу.

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

Так вот макросы позволяют настолько декларативно писать, что никакие хаскели и рядом не лежали.

Кроме того, см. хотя бы в википедию на тему того, что такое "парадигма программирования" - http://en.wikipedia.org/wiki/Programming_paradigm
чтобы не нести больше такого бреда
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(Deleted comment)
From: (Anonymous)
2011-01-16 03:10 pm (UTC)
А зачем кому-то верить? Можно же самому посмотреть. Вот http://lambda-the-ultimate.org/node/971 для лиспа. Теперь надо для хаскеля найти. У вас нигде соответствующего линка не завалялось? Было бы действительно интересно сравнить.
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-16 03:18 pm (UTC)
Тут мне комментарий пришёл на тему семантик.

Вот денотационная семантика Хаскеля: http://en.wikibooks.org/wiki/Haskell/Denotational_semantics

Вот про семантику RSR5: http://lambda-the-ultimate.org/node/971

Это простой вариант Лисп, практически, самый простейший из всех широко применимых, которому специально упрощали семантику.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-19 12:17 pm (UTC)
> Это простой вариант Лисп

Это не простой вариант, там много лишних фич. Оригинальная семантика в самом r5rs есть.

И сравнивать денотационную семантику с операционной по сложности нельзя, ясное дело.
(Reply) (Parent) (Thread)