?

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-14 10:20 pm (UTC)
Как с Хаскелем?
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 07:17 am (UTC)
У Хаскеля объективно синтаксис и семантика сильно сложнее, чем у лиспа.
(Reply) (Parent) (Thread)
[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)
[User Picture]From: thesz
2011-01-16 10:03 am (UTC)
Хотя я хотел спросить 13_49 насчёт справился ли он с Хаскелем. ;)
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 10:34 am (UTC)
Я понял твой вопрос сразу, да :)

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

Ну то есть мне насрать на то, как оно там с академической точки зрения, у меня есть практика в реальной реальности, и просто по факту в этой моей реальной реальности лисп используется мною, а хаскель - нет.

При этом никакого предубеждения к хаскелю у меня нету (вот к джаве и C++ - есть предубеждение). Просто лисп проще, вот и всё.

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

PS: под лиспом я понимаю "лисп вообще", а не common lisp. Конкретно я юзаю Racket.
(Reply) (Parent) (Thread)
[User Picture]From: thesz
2011-01-16 10:58 am (UTC)
>Конкретно в моём случае. Как оно в общем случае, мне пофигу.

Тогда зачем ты об этом говоришь в общественно доступных местах? Как я понимаю, дискуссия не может изменить твоё мнение, поскольку "жизнь такова, какова она есть, и больше никакова". Данную нам в ощущениях реальность мы, типа, изменить не в силах.

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

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

И критерии такой задачи?..

>PS: под лиспом я понимаю "лисп вообще", а не common lisp. Конкретно я юзаю Racket.

Вот опять. Почему твоё определение Лиспа отличается от определений других? Почему ты не используешь названия CL, Scheme, Racket и Emacs Lisp, как это делают другие, отмечая различия между языками?

Racket, кстати, отличается от Схемы настолько, что его даже переименовали.
(Reply) (Parent) (Thread)
[User Picture]From: grundik
2011-01-16 12:27 pm (UTC)
Дискуссия моего мнения изменить не может, да, потому что моё мнение основано не на размышлениях, а на действиях (ну то есть я пробовал ДЕЛАТЬ, а не думать ;) ).

Про мой статус кво я не понял, если честно. Но мне действительно непонятно, зачем наезжать на лисп. Я вот на хаскель не наезжаю - ну пользуются люди, ну и ладно. У меня не получается пользоваться им, и я думаю, что это потому что он сложный. Основываю своё мнение на своём же опыте, а не на словах Кея про абстрактные вещи.

Критериев задачи, где хаскель оптимален, я не знаю. Одна такая была - надо было проверить, что через операции с новой моделью BL возможно выразить все операции, которые были возможны на старой модели BL. Но она отпала. Появится другая - я почувствую. Статический анализатор кода мне было удобнее сделать на racket-е, хотя возможно, что на haskell было бы лучше.

Определения Лиспа не существует. Под словом Лисп каждый понимает своё. Чаще всего common lisp. Но нередко и "семейство языков". Когда я имею в виду CL, Scheme и прочих - я так и говорю: CL, scheme и прочие. Когда я говорю "лисп" я имею в виду "семейство языков".

Racket - это pure scheme плюс куча библиотек. То есть он не отличается, а сильно расширяет. GHC тоже предоставляет чуть больше, чем требует стандарт хаскеля, верно же?
(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
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
From: (Anonymous)
2011-01-16 11:01 am (UTC)
Семантика ленивого языка объективно проще семантики строгого. По мере добавления строгости, разумеется, сложность семантики нарастает.
А синтаксис Хаскеля да, сложнее. Синтаксис как раз и усложняют для улучшения читабельности, потому как языки с простым синтаксисом (брейнфак, лисп) читаются плохо и медленно, хотя научится их читать хоть как-то можно очень быстро.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-16 04:28 pm (UTC)
> Семантика ленивого языка объективно проще семантики строгого. По мере добавления строгости, разумеется, сложность семантики нарастает.

Скажем так - если нас есть язык и он имеет некую семантику, то есть некоторое "подмножество" этой семантики, которое упростится при переходе к ленивой стратегии вычислений. Дополнение этого "подмножества" будет неизменным.
(Reply) (Parent) (Thread)
From: nivanych
2011-01-16 04:34 pm (UTC)
У ленивого Тьюринг-полного языка заметно сложнее _ресурсная_ семантика.
(Reply) (Parent) (Thread)
From: (Anonymous)
2011-01-16 06:17 pm (UTC)
1)"Ресурсная семантика" на высоту порога вхождения принципиально не влияет, а значит к теме разговора не относится.
2)Сложнее она потому, что непривычна.
(Reply) (Parent) (Thread) (Expand)
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand
(no subject) - (Anonymous) Expand