?

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-21 01:59 am (UTC)
> Я от "макросистем" отошёл в 27 лет. ;)

Вы к ним не подходили.
Вот вам вопрос на засыпку - в негигиенической макросистеме макрос, который раскрывается в форму объявления (например в (define x 5)) - имеет сайд-эффекты или нет? Как "функция" он просто возвращает константный кусок АСТа (соответствующего коду "(define x 5)") - то есть полностью "чист".

> В интересных для меня задачах они не дают достаточного результата.

Нет, это значит, что вы предпочитаете другой стиль разработки.

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

Вы далеко не самый умный, все уже придумали до вас. Я же сказал - изучать макросистему для syntax-rules. Там как раз и есть макросы без сайдэффектов, сохраняющие лексическую структуру программы. Только у вас все на уровне интуитивного понимания - "хочется как-то так, не знаю как", а там - готовое, продуманное до мелочей, решение. И вы тут занимаетесь мокрыми фантазиями на тему - а люди использовали это на практике. Использовали, использовали, да и запилили syntax-case, который поддерживают все нормальные реализации схемы. А схемеров (в отличии от тех же общелисперов, кстати) уж никак не заподозрить в стремлении насовать в язык фич просто "чтобы было можно". Что до типизации - тут надо уточнить, какую именно типизацию вы имеете в виду. Если приписывать термам типы оригинального языка - во-первых, это не нужно, вообще, раскрываем мы все макросы в компайл-тайме, по-этому статически чекать их не надо - если установить рантайм контракт на входные/выходное значение, то он будет чекнут во время компиляции, и в том же Typed Racket вы можете, например, импортировать макрос, навесив на него типы - но это не надо никому. Если же вы под типизацией имели в виду синтаксические свойства термов - константы, те или иные выражения и т.п. - это тоже все есть, например, в dylan или в syntax/parse для Racket. Для такого рода типизации есть и работы, описывающие макросы со статической проверкой на базе syntax-rules. И, что самое главное, к вашим фантазиям о модели вычислений это не имеет ровным счетом никакого отношения.
(Reply) (Parent) (Thread)