LINUX.ORG.RU

lisp


0

0

Решил изучать LISP

Слышал о Scheme, Common LISP. Уверен, что еще много чего есть... Можно немного описать их? Что вы посоветуете?

Спасибо...

anonymous

Scheme - очень маленький и простой язык. Полное описание (R5RS) - 50 страниц, с примерами и лирикой. Идеологически чистый и красивый. Мало применимый на практике, но идеальный для обучения.

Common Lisp - суровый и мрачный индустриальный язык, в котором есть всё, что может понадобиться. Описание (ClTl2) - на более чем 1000 страниц. Содержит немало исторически сложившихся идеологически кривых решений (e.g., разные пространтсва имён для функций и переменных). Очень могучие реализации, в отличии от Схемы.

vsl
()
Ответ на: комментарий от vsl

1. На Scheme возможно метапрограммирование. 2. Интересует эффективность выполнения/качество порождаемого кода.

anonymous
()
Ответ на: комментарий от anonymous

1. Некоторые реализации языка Scheme поддерижвают define-macro - аналог defmacro из Common Lisp. Аналог не полноценный - как правило, внутри define-macro доступен лишь нулёвый R5RS-environment. Но жить с этим можно - см. http://dslengine.sourceforge.net/

Все реализации Схемы поддерживают гигиенические R5RS-макры. Но это скорее аналог C++-ных темплейтов, особо много с ними не наразвлекаешься.

2. Качественный код даёт только Bigloo. И то, до хороших Common Lisp-ов не дотягивает, с тем же SBCL - не сравнить... Есть ещё Stalin, но у него свои косяки...

vsl
()

о как народ заинтересовлся Лиспом - это не может не радовать .. :)

по мне с Scheme легче начинать, легче учить, но реально на практике в продакшене лучше пользовать common lisp

lg ★★
()
Ответ на: комментарий от vsl

вот это, извините, по-просту не верно и с точностью до наоборот. ClTl2 --- это по-сути Draft окончательного стандарта, просто в нем описана некоторая функциональность (environment access, series) которая в окончательный стандарт не вошла.

anonymous
()
Ответ на: комментарий от anonymous

Угу. Но он - стандарт de-facto. Компилятор, поддерживающий ClTl2 - поддерживает и ANSI, обратное же - не верно.

vsl
()
Ответ на: комментарий от vsl

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

Впрочем, исторически сложившихся кривых решений в CL и правда хватает :)

aa5779
()

Подскажите, плиз, книжечки хорошие по ФП. Только не те, которые синтаксис описывают, а которые "мыслить функционально" учат.

anonymous
()
Ответ на: комментарий от vsl

>Угу. Но он - стандарт 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

aa5779
()
Ответ на: комментарий от anonymous

Есть "книжечка" которая так и называется -- "Функциональное программирование" (авторы у меня из головы выскочили, издана в "Мире" лет 10-15 назад, обложка зеленого цвета).

aa5779
()
Ответ на: комментарий от anonymous

Мне понравилась Structure and Interpretation of Computer Programs. Да и перевод ее в инете есть.

anonymous
()
Ответ на: комментарий от aa5779

Харрисон. Но это не про Лисп, там в основном про ленивые языки, с упором на реализацию...

vsl
()
Ответ на: комментарий от anonymous

> Мне вот так сходу не вспомнить, что есть в финальном ANSI CL... > А их еще и несколько?

Чего несколько? Стандартов CL? На текущий момент он один, просто любой стандарт до окончательного принятия всегда имеет несколько предварительных версий. Как я уже сказал, CLtL2 может с практической точки зрения рассматриваться именно так. Как, в принципе, и CltL1...

aa5779
()
Ответ на: комментарий от aa5779

кстати про пространства имен ..

Schemисты считают достоинством scheme что одно простанство

Lispисты считают достоинством лиспа и недостатком scheme что есть разделение

lg ★★
()
Ответ на: комментарий от aa5779

> Чего несколько?

Я подумал, что если есть "финальный ANSI CL", то есть и другие :)

Ладно, я понял. Спасибо.

anonymous
()
Ответ на: комментарий от lg

> Lispисты считают достоинством лиспа и недостатком scheme что есть разделение

Угу, прикольно выглядит:

(SETQ FUNC-NAME (FUNC-NAME PARAMS))

;)

anonymous
()

а что вообще реально писать на лиспе???
Для какой области он хорошо подходит???

anonymous
()
Ответ на: комментарий от anonymous

> а что вообще реально писать на лиспе???

А что ты хочешь писать? :)

> Для какой области он хорошо подходит???

А в какой области ты хочешь писать? :)

yyk ★★★★★
()
Ответ на: комментарий от yyk

Ну вопрос то ставился как раз наоборот!!!
Мне просто интересно. Беру я например перл - я могу работать с БД, сеткой, почтой, могу ГУЙ наваять ну и т.д и т.д. Возьму я скажем С++ - то же самое. НУ грубо говоря на этих языках, с таким кол-вом библиотек которое сейчас для них существует можно сделать практически все.
Понятно что не все будет выглядеть красиво, но ведь можно!!!

А на лиспе точно так-же ????

anonymous
()
Ответ на: комментарий от anonymous

Lisp как и любой другой Тьюринг-полный язык хорошо подходит для любой области ;)

Если серьезно и исходя из реального положения дел, то областей, для которых бы Lisp не подходил, не так уж много --- во всяком случае, существуют реализации Lispа непосредственно поверх "железа" (напр. Movitz) -- я не могу сказать, что они пользуются большой популярностью, но все же... Если же оставить в стороне совсем уже low-level и hard real-time, то таких областей IMHO нет (я имею в виду, в которых бы Lisp не подходит или подходит хуже любого другого языка)

aa5779
()
Ответ на: комментарий от aa5779

ok. убедили :-) 
ну если я например захочу попробывать написать простенькое клиент
серверное приложение. Библиотеки для работы с сокетами, сетью есть???

anonymous
()
Ответ на: комментарий от anonymous

> А на лиспе точно так-же ???? Разумеется, потому что (a) под Lispом безо всяких проблем юзаются любые C библиотеки (б) сугубо Lispовых библиотек тоже хватает.

aa5779
()
Ответ на: комментарий от anonymous

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

aa5779
()
Ответ на: комментарий от aa5779

здорово.
это все что я хотел знать.
спасибо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.