← Архив: Common Lisp

Обучение Lisp - с чего начать, как продожить

Author: · 24.12.2009 14:51
· original author: LispUser
Добрый день! Эта тема пересекается с иными, но хотелось бы получить более общие рекомендации.
Часть из них здесь:
выбор Lisp'а, список литературы
пробую сделать для начала - PCL для КПК
Хороший пример с подробными пояснениями для начинающих
Фриц Моисеевич Морген - Пишем робота на LISP
Но он на newLisp, несовместимом с Common Lisp.
Альтернатива профессионального уровня  Загрузка множества url с помощью iolib
Вопрос. Стоит ли углубляться в newLisp или не стоит вырабатывать неправильные навыки.
Какой инструментарий для обучения Common Lisp наиболее оптимален: интуитивно понятен, дружественен к новичкам, расширяем, позволяет создавать в дальнейшем профессиональные приложения, в т.ч. с GUI (пусть и не бинарные пока)?
Спасибо!
 
· original author: andy128k
По-моему, newLisp не очень подходит для разработки. Реализацию CL можно брать любую, они все приблизительно одинаково дружественны. Для GUI можно использовать ltk или cl-gtk2 (есть и другие, но они сложнее).
· original author: archimag
to LispUser:
На зачем же так грубо: качать PCL отсюда :) Есть пакет, restas-wiki - в нём содержится весь необходимый функционал для парсинга оригинальной dokuwiki-страниц и генерации html. Вот его то и нужно использовать для генерации "чистой" html-версии.
· original author: LispUser
archimag, какой URL оригинальной dokuwiki-страниц?
Может, лучше начать с более универсального применения - парсинга html-страниц?
· original author: archimag
> какой URL оригинальной dokuwiki-страниц?Ну, так, http://pcl.catap.ru/doku.php
> более универсального применения - парсинга html-страниц?
А что в этом универсального? Это как бы решение вообще другой задачи. 
· original author: Pirr
Я вот тоже перечитываю PCL в третий раз, параллельно ищу дополнительную инфу и все время мечусь между версиями Лиспа.newLisp - очень заманчив. Компактен, умеет делать exe, кроссплатформенен и дружит с GUI. Но нет по нему литературы и русской документации, только пару вводных статей удалось найти.
Пробовал и несколько реализаций Scheme. Язык проще, есть неплохие компиляторы (вроде Gambit-C). Литературы меньше, и в основном она пересекается с Common Lisp-ом.
Но думаю надо все таки учить Common Lisp, и не парить себе мозг.
Неплохо было бы завести на этом сайте раздел "Примеры" и выкладывать в нем небольшие реальные примеры использования Лиспа, наподобие Фриц Моисеевич Морген - Пишем робота на LISP  .
Хочется чего то простого и земного как примеры из PCL.
· original author: Pirr
Или даже не "Примеры" а "Практика" как в PCL, это будет вернее.
· original author: archimag
> Неплохо было бы завести на этом сайте раздел "Примеры" и 
> выкладывать в нем небольшие реальные примеры использования Лиспа

Дело в том, что писать какие-то специальные учебные примеры никто не будет. А маленькие практические задачи вообще, мне кажется, редкость :) В своём блоге я стараюсь выкладывать образцы кода, например такие, но они как бы не учебные, а вполне боевые, и часто зависят от множества библиотек.
· original author: Pirr
Вот вот, боевые. А маленьких, учебных, крайне мало. Но Москва не сразу строилась... по этому если есть желание продвигать Лисп в массы то нужны примеры понятные новичкам.И использование библиотек тоже хорошо бы изучить на примерах или хотя бы узнать как к ним подступится без русской документации и знания английского.
У Лисперов практически один фонарь, который их ведет к знанию языка - это PCL!
· original author: archimag
to Pirr: 
Проблема, как всегда, упирается в людей, готовых заниматься подобной работой, точнее в их отсутствии.... Создать то такой раздел не проблема, но наполнять его пока нечем :(
· original author: Pirr
Согласен. Лисперов мало, а активных единицы (а может быть archimag ты один ;) ).
· original author: artem
> хотя бы узнать как к ним подступится без русской документации и знания английского.
Английский знать нужно. Без него не то что "совсем никак" будет, но где очень близко к области "совсем никак".
> У Лисперов практически один фонарь, который их ведет к знанию языка - это PCL!
Самый главный "фонарь", это The Common Lisp HyperSpec(tm). Online читать можно тут http://www.lispworks.com/documentation/common-lisp.html
Из русского, в печатном виде, попробуйте поискать "Структура и Интерпретация Компьютерных Программ", http://www.biblio-globus.ru/description.aspx?product_no=9001138  (я ее видел на днях в Библиоглобусе в продаже). Может есть и в pdf в интернете (английская версия от авторов есть точно). Хотя в той книге и Scheme в качестве диалекта Lisp, но книга стоящая для любого лиспера. Попутно в качестве упражнений будете писать примеры из книги под CL (кстати, в интернете есть уже готовый код на CL для этой книги, но опять эти примеры на англоязычном сайте). Так же есть видеолекции авторов этой книги в свободном доступе http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/  (на английский).
Насчет изучать лисп. Придумайте задачу, которая вам интересна и делайте ее на CL. Попустно так и изучите CL. Я уже говорил, что я стал изучать недавно CL делая mysql connector (подключения к базе данных mysql напрямую). Вот текущий результат http://www.obrezan.com/lisp/mysql.lisp
А английский, да -- учить нужно :-)
· original author: Pirr
>Английский знать нужно. Без него не то что "совсем никак" будет, но где очень близко к области "совсем никак".Технический английский я знаю и документацию переведу, но вот книгу или статью вряд ли. Хотя сейчас здорово помогают переводчики, то же Google.


>Из русского, в печатном виде, попробуйте поискать "Структура и Интерпретация Компьютерных Программ"

Много слышал за эту книгу, но пока мне не попадалась. Если рекомендуете... буду искать.


>Насчет изучать лисп. Придумайте задачу, которая вам интересна и делайте ее на CL. Попустно так и изучите CL. Я уже говорил, что я стал изучать недавно CL делая mysql connector (подключения к базе данных mysql напрямую). Вот текущий результат http://www.obrezan.com/lisp/mysql.lisp

А с этим проблема, то что хотелось бы реализовать на Лиспе, чувствую, сразу не осилю.

· original author: Pirr
Просто класс!!! Нашел книгу "Структура и Интерпретация Компьютерных Программ" на русском языке.Загляните сюда http://lib.kruzzz.com/1-65/etc.html столько книг, причем все ссылки прямые без всяких там файлообменов!
· original author: LispUser
Pirr, спасибо за ссылку!
Вот еще SICP по-русски - решение примеров.
Alex Ott's Russian blog about IT-related things: SICP на русском :
> Можно взять тут -
http://newstar.rinet.ru/~goga/sicp/sicp.ps.gz (это страница переводчика)
(Просьба, может, кому удасться сконвертировать sicp.ps в html
?)

Pirr:
> newLisp - очень заманчив. Компактен, умеет делать exe, кроссплатформенен и дружит с GUI. Но нет по нему литературы и русской документации, только пару вводных статей удалось найти.
Согласен, на первый взгляд таки да, очень.
Вот хороший пример для начинающих и образец для написания таких примеров -
Фриц Моисеевич Морген - Пишем робота на LISP
Повторяя его, столкнулся с запутанностью таки, неудобством редактора (нет подсветки пар скобок, только при наборе курсор перескакивает), ошибками в реализации библиотечных функций, переименованием предикатов, встроенных функций (напр., define вместо defun и т.д.). Ну и более глубокие для новичка недостатки:
PCL для КПК Автор: andy128k - 15.12.2009 17:15:
> newLisp -- это и не лисп толком. Только то, что там dynamic scoping уже говорит о многом. Если уж хочется "лёгкого", то лучше брать scheme.
Так что, думаю преодолеть барьер непривычности emacs и поставить SLIME + SBCL, правильно?
Примеры - CL CookBook и "Практика" в PCL.
Но все же стиль подачи Моргена в его примере с роботом, ИМХО, наиболее дружественен к новичкам, позволяет быстро получить практические навыки.
· original author: LispUser
Жаль, что нет редактирования. Хотя бы до ответа.
Хочу дополнить, что на этом сайте есть замечательный перевод CL Cookbook или поваренная книга
· original author: LispUser
О newLISP, что он современнее CL и Scheme, и что этих "старичков" лучше не учить:
NewLISP достаточно сильно отличается от Common LISP или Scheme, и разработчики NewLISP не советуют изучать книги по этим языкам в целях освоения newLISP — newLISP гораздо более современен и многие проблемы решает совсем по-другому. Подробную документацию и введение в newLISP (англ.) можно найти здесь, здесь и здесь. Также есть подробный сборник образцов кодирования, примеры и форум (англ.). Дополнительные модули, не вошедшие в поставку, можно найти здесь.
                                                                               (Из статьи newLISP на script-coding.info)
newLISP, на мой взгляд, имеет большое преимущество, так как позволяет создать исполняемый файл (см. статью), имеет несложный API для GUI, бесплатен, словом, привлекателен и искусителен.
Покритикуйте, плз, еще его!
· original author: Love5an
newLISP это говно
· original author: andy128k
LispUser:
Вас надо уговаривать, чтоли? В newLisp нету замыканий, это перекрывает все его преимущества.
GUI в нём на жабе -- говорит само за себя.
Исполняемый файл можно сделать в любой реализации CL. Правда он будет большим.
С GUI тоже вариантов полно: cl-gtk2, ltk, gtk-server, rdnzl+winforms.
Некоторые реализации Scheme могут делать исполняемый файл. Например, я делал модуль для python на scheme и компилировал его Bigloo.
Для Guile есть биндинг к GTK2. Про остальные не скажу, в схеме не силён.
В любом случае не вижу причин использовать суррогат (newLisp) вместо нормального, проверенного годами диалекта CL или, на худой конец, Scheme.
· original author: dmitry_vk
Согласен, newLISP — г.
>Исполняемый файл можно сделать в любой реализации CL. Правда он будет большим.
В коммерческих лиспах файл будет маленьким. Да и в SBCL тоже известно, что надо делать — пилить tree shaker.
В newLISP ужасная семантика. В нем есть только F-expressions (от которых в обычном лиспе отказались). То есть, любой функции на вход подаются не аргументы, а тело выражений-аргументов, и функция сама определить, как их и когда eval'ить. А это значит, что это даже тормознее, чем самый тормозной интерпретатор.
Мне кажется, очевидно, что это очень и очень плохо. Идиотский способ управления памятью — не GC (как в лиспе, яве), не подсчет ссылок (как в питоне и vala), а некое свое one reference only (http://www.newlisp.org/MemoryManagement.html).
"newLISP does not support sharing of subobjects among objects, cyclic structures, nor multiple variables pointing to the same object. Objects are (physically) copied when stored in data structures or passed to functions"
Ну а аргументы типа "У нас есть печеньки GUI в комплекте" тоже считаю немного странными.
Ну и плюс нездоровый фанатизм.
· original author: andy128k
Еще маленький бинарник можно сделать в ECL.
· original author: Pirr
>(Просьба, может, кому удасться сконвертировать sicp.ps в html?)Вот тут лежит SCIP на русском в djvu формате, думаю можно найти и в PDF-формате.
А зачем конвертировать в html???
Если очень надо можно воспользоваться этим сервисом для перевода PDF в html. А если потом полученную ссылку скормить переводчику  то можно получить и перевод PDF-файлов!
· original author: Pirr
а .ps файл легко конвертируется в PDF с помощью Adobe Acrobat.
· original author: LispUser
archimag:
> Есть пакет, restas-wiki - ...Вот его то и нужно использовать ...
Сорри, не знаю как подступиться.
Установил emacs, SLIME, SBCL.
Скачать пакет и открыть в SLIME?
Pirr, спасибо. Но zoho не смог сконвертировать. Html "резиновый" с иллюстрациями из SICP.ps хотелось получить для чтения на КПК.
andy128k, спасибо за ECL и наставление на путь истинный. Иногда, в начале пути это сложно.
dmitry_vk, спасибо за разъяснения!
Love5an, отличный аргумент для неофита!
archimag,
как бы добавить "л" в названии темы - "продоЛжить"?
Спасибо!
· original author: LispUser
Плз, как скачать, установить и использовать пакет restas-wiki ?
Есть ли доки, чтобы понять, как работать с пакетами, в частности, с restas-wiki?
Как использовать функции пакета restas-wiki, они где-нибудь описываются?
· original author: archimag
> Плз, как скачать, установить и использовать пакет restas-wiki ?
Ну, скачать по ссылке :)  git clone и т.п. Устанавливается как обычные asdf-пакеты, путём создания символической ссылки в соответствующей директории.
> Есть ли доки, чтобы понять, как работать с пакетами, в частности, с restas-wiki?
Какие именно доки имеются ввиду? Доки по asdf? restas-wiki это плагин к RESTAS, загружается через asdf, единственный пример использования описан здесь: http://archimag-dev.blogspot.com/2009/12/restas-wiki.html. Что бы его использовать надо немного понимать RESTAS.
> Как использовать функции пакета restas-wiki, они где-нибудь описываются?
Документации нет, есть исходный код. Для получения html-версии PCL требуется с этим кодом разобраться, хотя бы частично. Конкретно для этой задачи даже не надо разбираться как использовать данный пакет на сайте, необходимо просто заюзать функции для парсинга и рендерига dokuwiki-страниц.
P.S. Подозреваю, что на данном этапе знакомства с Common Lisp лучше взять задачку попроще ;)
· original author: LispUser
> Ну, скачать по ссылке :)  git clone и т.п. Устанавливается как обычные asdf-пакеты, путём создания символической ссылки в соответствующей директории.
Сорри, не нашел в help'е github.com, как добраться до их git-сервиса.
Пробовал "в лоб":
usr@usr-desktop::~/restas$ git clone http://github.com/archimag/restas-wiki
Initialized empty Git repository in /home/usr/restas/restas-wiki/.git/
fatal: http://github.com/archimag/restas-wiki/info/refs not found: did you run git update-server-info on the server?
usr@usr-desktop:~/restas$
usr@usr-desktop:~/restas$ git update-server-info
fatal: Not a git repository (or any of the parent directories): .git
usr@usr-desktop:~/restas$
> P.S. Подозреваю, что на данном этапе знакомства с Common Lisp лучше взять задачку попроще ;)
Я Вам уже надоел? :) Не, я, конечно, слишком новичок, но бросить - почувствовать себя обезьяной. Может, что и выйдет, то-то будет радости!
> Какие именно доки имеются ввиду? Доки по asdf? restas-wiki это плагин к RESTAS, загружается через asdf, единственный пример использования описан здесь: http://archimag-dev.blogspot.com/2009/12/restas-wiki.html.
Понял, буду смотреть пример и пробовать.
> Что бы его использовать надо немного понимать RESTAS.
К сожалению, поиск "RESTAS" дал только Ваши материалы, никакой теории по RESTAS нет. Это ведь Ваша разработка?
Может быть "REST"
· original author: archimag
> Сорри, не нашел в help'е github.com, как добраться до их git-сервиса.
Если там открыть проект, то можно увидеть ссылку HTTP Read-Only, её и надо использовать, конкретно для restas-wiki это будет:
git clone http://github.com/archimag/restas-wiki.git
> Я Вам уже надоел? :)
Дело не в этом, а в зависимостях проекта :) Надо ставить их руками, а кое-что даже компилироваться (cl-libxml2). Это требует некоторого опыта.
> К сожалению, поиск "RESTAS" дал только Ваши материалы
Да, доки нет, есть несколько моих постов :) Может через какое-нибудь время что-нибудь появится, но пока это в проекте....
> Может быть "REST"
Изначально я расшифровывал RESTAS как REST Application Server. Теперь никак не расшифровываю ;)
· original author: Ander Skirnir
>' (В нем есть только F-expressions (от которых в обычном лиспе отказались). То есть, любой функции на вход подаются не аргументы, а тело выражений-аргументов, и функция сама определить, как их и когда eval'ить.)
Можно, плз, поподробнее про F-expressions? Вы так описали, будто это просто ленивые функции типа nlambda. Или так и есть?
· original author: dmitry_vk
http://en.wikipedia.org/wiki/Fexpr
Это не ленивые функции, а аналог макроса, но который обрабатывает аргументы не во время компиляции, а во время исполнения. Любой макрос — это частный случай f-expr'а. Например, с их помощью можно задавать специальные формы.
· original author: Ander Skirnir
Понятно, спасибо.
Ну да, называть это ленивостью - ошибка, но я имел ввиду именно время вычисления аргументов. Так вот, к чему я веду - говорят, что в CL и Scheme от fexpr отказались, но я точно помню, что видел то ли в clozure cl, то ли в clisp nlambda - аналог лямбды, но не вычисляющий свои аргументы при вызове.
· original author: treep
dmitry_vk
> В коммерческих лиспах файл будет маленьким. Да и в SBCL тоже известно, что надо делать — пилить tree shaker.
Это который собирает весь необходимый rt код? Например если грамотно прописывать типы, то можно получать нативный код без привязок к rt-системе sbcl, но сейчас он (пока) не умеет его собирать и обвёртывать для записи в исполняемый формат, а если использовать длинную арифметику, то должен собираться только код для работы с ней...
Кстати есть совсем другой способ - реализовать sbcl.core как shared library, точнее это скорее будет sbcl.rt.so для самого основного ран-тайма и sbcl.so в остальном. Тогда даже если я вызову в коде eval, то это будет просто вызов eval из дин. билиотеки. Вот это было бы красиво.
· original author: dmitry_vk
>Это который собирает весь необходимый rt код?
По сути, да. Коммерческие лиспы так и поступают - выкидывают куски кода, которые не используются.

>Кстати есть совсем другой способ - реализовать sbcl.core как shared library, точнее это скорее будет sbcl.rt.so для самого основного ран-тайма и sbcl.so в остальном. Тогда даже если я вызову в коде eval, то это будет просто вызов eval из дин. билиотеки. Вот это было бы красиво.
Конечно, это было бы здорово. Это тоже рассматривали разработчики SBCL. Другое дело, что это еще сложнее и требует многих изменений в архитектуре SBCL.
· original author: LispUser
Может ли кто-нибудь предложить несложный, но увлекательный пример для начинающего?
· original author: artem
> Может ли кто-нибудь предложить несложный, но увлекательный пример для начинающего?
http://www.lisperati.com/casting.html
· original author: treep
Посмеялсо=))), а то Why's guide есть даже для Haskell, и я думаю - "а где 'Лисп в картинках и шутках'", могу ещё предложить мангу на тему лиспа, только там по-японски))
· original author: power
>могу ещё предложить мангу на тему лиспа
Ждем с нетерпением!
· original author: treep

マンガで分かるLisp (Manga Guide to Lisp)

Рико-Сан: богиня, которая живет в магазине электроники.
Сузи: известна у себя как девушка, поймавшая крокодила в пруду.
Вакана: Проходит Супер-Марио за 56 секунд!
Рикка: любит тофу и никогда не думает ни о чем кроме тофу.
Мирин: кошка соседей. До недавнего времени постояно путала 'макрос' с 'магуро' (такая японская рыба).
Куда: всегда едет по встречной полосе.
Ая: не очень умная девушка.
А так только картинки посмотреть (хотя если кто-то знает японский).
· original author: allchemist
Бегло посмотрел обсуждение, заметил слова CL, Scheme и Newlisp. :)
Могу сказать, что изучение схемы, ньюлиспа и других диалектов при некотором знании коммонлиспа даже без цели их последующего использования вполне полезно для понимания самого коммон-лиспа. Некоторым образом это позволяет посмотреть на коммон лисп с других строрн, что дюже дюже полезно.
Тем не менее, могу добавить, что newlisp сам по себе - то еще уг.
· original author: treep
@LispUser
Если есть желание - помогите в переводе доков на русский язык. Cookbook только начата, туда можно писать обо всём что часто используется. Ну и вообще - на английском просто очень много статей, книг и презентаций, а на русском совсем мало.
· original author: treep
З.Ы. NewLisp - в игнор :) Конечно может быть там есть какая-то раздельная компиляция, но я сомневаюсь, а раз так - там ничего нет. Без замыканий и нормального gc это даже не лисп.
· original author: LispUser

@ treep - 21.02.2010 01:46

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

http://cl-cookbook.sourceforge.net/ => http://lisper.ru/wiki/Cookbook ?
Буду стараться.
> З.Ы. NewLisp - в игнор :)
Ясно!
Вопрос с практическим примерчиком для начинающего остается открытым.
Нужен какой-то катализатор, кристаллик, как крупинка соли в перенасыщенном растворе, чтобы дальше пошла "самоподдерживающаяся реакция".
Ну, чтобы ощутить, "у меня тоже получается".
Какой-нить простенький правктический пример... (Похожи на пример Моргена про робота на Lisp (см. выше).
@artem - 15.02.2010 18:25> Может ли кто-нибудь предложить несложный, но увлекательный пример для начинающего?
http://www.lisperati.com/casting.html
Посмотрю, спасибо!
· original author: treep
>> http://cl-cookbook.sourceforge.net/ => http://lisper.ru/wiki/Cookbook
Тогда уж (translate :input http://cl-cookbook.sourceforge.net :input-lang :en :output http://lisper.ru/wiki/Cookbook :output-lang :ru) ;-). В конце оригинального кукбука есть неплохой список статей, в википедии есть вики-книга на английском. Ну и отсебятину тоже можно, если есть чего. Да, ещё есть CLHS :) но он видимо останется неприступным.
>> Вопрос с практическим примерчиком для начинающего остается открытым.

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