Scheme - очень маленький и простой язык. Полное описание (R5RS) - 50 страниц, с примерами и лирикой. Идеологически чистый и красивый. Мало применимый на практике, но идеальный для обучения.
Common Lisp - суровый и мрачный индустриальный язык, в котором есть всё, что может понадобиться. Описание (ClTl2) - на более чем 1000 страниц. Содержит немало исторически сложившихся идеологически кривых решений (e.g., разные пространтсва имён для функций и переменных). Очень могучие реализации, в отличии от Схемы.
1. Некоторые реализации языка Scheme поддерижвают define-macro - аналог defmacro из Common Lisp. Аналог не полноценный - как правило, внутри define-macro доступен лишь нулёвый R5RS-environment. Но жить с этим можно - см. http://dslengine.sourceforge.net/
Все реализации Схемы поддерживают гигиенические R5RS-макры. Но это скорее аналог C++-ных темплейтов, особо много с ними не наразвлекаешься.
2. Качественный код даёт только Bigloo. И то, до хороших Common Lisp-ов не дотягивает, с тем же SBCL - не сравнить... Есть ещё Stalin, но у него свои косяки...
вот это, извините, по-просту не верно и с точностью до наоборот. ClTl2 --- это по-сути Draft окончательного стандарта, просто в нем описана некоторая функциональность (environment access, series) которая в окончательный стандарт не вошла.
Разные пространства для имен и функций -- это не кривое решение, ни идеологически, ни с какой точки зрения. Просто это одно из наиболее существенных различий между CL и схемой, поэтому когда нужно переключаться с одного на другое -- может очень раздражать. (Я бы скорее сказал, что одно пространство имен -- это более кривое решение, особенно принимая во внимание отсутствие в стандартной схеме понятия модуля или пакета, но на самом деле это тонкий вопрос).
Впрочем, исторически сложившихся кривых решений в CL и правда хватает :)
>Угу. Но он - стандарт de-facto. Компилятор, поддерживающий ClTl2 - поддерживает и ANSI, обратное же - не верно.
С какой это стати? Мне вот так сходу не вспомнить, что есть в финальном ANSI CL, чего нет в CLtL2, а копаться в issues сейчас некогда, но я абсолютно уверен, что есть вещи, отсутсвующие в ClTl2, но присутствующие в ANSI CL --- по-моему, define-symbol-macro как раз сюда относится.
С другой стороны, из свободных реализаций никто именно ClTl2 не поддерживает -- я имею в виду как раз environment introspection и series (sbcl поддерживает первое, но как отдельный модуль и не полностью)
В любом случае, CLHS всеми признается как более авторитетный источник, нежели CLtL2 (кто не верит -- может провести опрос на c.l.l), что, разумеется, не умаляет объективной ценности ClTL2
Есть "книжечка" которая так и называется -- "Функциональное программирование" (авторы у меня из головы выскочили, издана в "Мире" лет 10-15 назад, обложка зеленого цвета).
> Мне вот так сходу не вспомнить, что есть в финальном ANSI CL... > А их еще и несколько?
Чего несколько? Стандартов CL? На текущий момент он один, просто любой стандарт до окончательного принятия всегда имеет несколько предварительных версий. Как я уже сказал, CLtL2 может с практической точки зрения рассматриваться именно так. Как, в принципе, и CltL1...
Ну вопрос то ставился как раз наоборот!!!
Мне просто интересно. Беру я например перл - я могу работать с БД, сеткой, почтой, могу ГУЙ наваять ну и т.д и т.д. Возьму я скажем С++ - то же самое. НУ грубо говоря на этих языках, с таким кол-вом библиотек которое сейчас для них существует можно сделать практически все.
Понятно что не все будет выглядеть красиво, но ведь можно!!!
А на лиспе точно так-же ????
Lisp как и любой другой Тьюринг-полный язык хорошо подходит для любой области ;)
Если серьезно и исходя из реального положения дел, то областей, для которых бы Lisp не подходил, не так уж много --- во всяком случае, существуют реализации Lispа непосредственно поверх "железа" (напр. Movitz) -- я не могу сказать, что они пользуются большой популярностью, но все же... Если же оставить в стороне совсем уже low-level и hard real-time, то таких областей IMHO нет (я имею в виду, в которых бы Lisp не подходит или подходит хуже любого другого языка)
ok. убедили :-)
ну если я например захочу попробывать написать простенькое клиент
серверное приложение. Библиотеки для работы с сокетами, сетью есть???
> А на лиспе точно так-же ???? Разумеется, потому что (a) под Lispом безо всяких проблем юзаются любые C библиотеки (б) сугубо Lispовых библиотек тоже хватает.