Nikodemus Siivola - Nikodemus' Common Lisp FAQ
Название: | Nikodemus' Common Lisp FAQ | |
Автор: | Nikodemus Siivola | |
Жанр: | Самиздат, сетевая литература, Литература ХXI века (эпоха Глобализации экономики), Любительские переводы, Lisp, Scheme | |
Изадано в серии: | неизвестно | |
Издательство: | Интернет-издательство «Stribog» | |
Год издания: | 2021 | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Nikodemus' Common Lisp FAQ"
Последнее обновление: 2012-04-13.
Это очень неофициальное ЧаВО по языку Common Lisp, отражающее субъективное мнение Nikodemus Siivola. Этот текст частично основан на других ЧаВО, встречавшихся на просторах интернета и comp.lang.lisp.
Если вы думаете, что я воспользовался вашим текстом, буду рад признаться в этом, поэтому пишите на nikodemus@random-state.net.
Текущая версия этого ЧаВО доступна по следующим адресам:
http://random-state.net/files/nikodemus-cl-faq.txt
http://random-state.net/files/nikodemus-cl-faq.html
ЧаВО также периодически публикуется в comp.lang.lisp.
Читаем онлайн "Nikodemus' Common Lisp FAQ". [Страница - 3]
http://common-lisp.net/project/cl-gtk2/
http://sourceforge.net/projects/clg/
http://www.gtk-server.org/
CLIM (Common Lisp Interface Manager) — это почти стандартизированная спецификация API для GUI, довольно сильно отличающаяся от GUI, перечисленных выше. Не ожидайте, что все будет знакомо и понятно.
http://random-state.net/files/how-is-clim-different.html
Многие клянутся, что это лучшее, что есть для построения GUI, другие утверждают, что это совсем не так. Как бы то ни было, большинство коммерческих Lisp'ов реализуют CLIM, и еще есть переносимая открытая библиотека, называемая McCLIM, довольно удобная, хотя в последнее время не особо развиваемая.
http://common-lisp.net/project/mcclim/
CLX — это переносимый низкоуровневый Lisp-интерфейс к X11, предоставляющий уровень абстракций, сопоставимый с Xlib.
http://www.cliki.net/CLX
https://github.com/sharplispers/clx
Если не строго ограничиваться вопросами GUI, буду неправ, если не упомяну CL-OPENGL, переносимую привязку к API OpenGL, GLU и GLUT:
http://common-lisp.net/project/cl-opengl/
Какие есть форумы?
Не форум конечно, но есть Planet Lisp — агрегатор блогов по Common Lisp. Много интересной информации, без избытка.http://planet.lisp.org/
LispForum — просто хороший форум:
http://www.lispforum.com/
но я не ручаюсь, поскольку бываю там нечасто.
Есть ещё группы comp.lang.lisp на Usenet/Google Groups, но они густо населены троллями. Пишущие там авторы довольно грамотны, при этом спекуляции профанов — рядовое явление. Читать эти группы может быть тяжело, но чтобы пользоваться Lisp'ом, читать их не обязательно.
http://groups.google.com/group/comp.lang.lisp
Специализированные списки рассылки имеют намного лучшее отношение сигнал/шум. Все реализации стараются завести собственные пользовательские и справочные списки рассылки, большинство библиотек также создают собственные списки рассылки. Для SBCL есть, например, это:
https://lists.sourceforge.net/lists/listinfo/sbcl-help
Среди open-source разработчиков и пользователей популярен канал #lisp на freenode.org. Имейте, впрочем, ввиду, что на #lisp довольно жестко придерживаются темы, и эта тема Common Lisp, а не «Lisp вообще». Для этого есть канал #lispcafe с гораздо более мягкими правилами.
Довольно активно сообщество разработчиков игр, но я не особо с ним знаком. Гугл вам в помощь.
Профессионалы Common Lisp общаются в списке «pro». Обсуждение других диалектов Lisp'а является офтопиком, вопросы новичков НЕ принимаются.
http://lists.common-lisp.net/mailman/listinfo/pro
Свойства языка
Как скомпилировать файл?
Короткий ответ: запускаете Lisp и печатаете:(compile-file "/path/to/myfile.lisp")
Затем, скорее всего, вам потребуется загрузить (load…) компилированный файл.
Развернутый ответ: большинство компилируемых языков неинтерактивны — вы компилирует файл из командной строки или IDE, затем запускаете компилированный файл. В Lisp'е все не так.
При том, что в общем случае вы можете превратить ваш проект в исполняемый файл, типичная рабочая сессия не похожа на цикл правка-компиляция-выполнение, как можно было бы ожидать.
Обычно взаимодействие происходит с запущенным Lisp-процессом, который содержит рабочую сессию, в которую вы интерактивно добавляете код.
Например:
1. открываем Emacs, с помощью M-x slime запускаем Slime и Lisp;
2. с помощью, к примеру, ASDF, загружаем имеющийся код;
3. открываем нужный файл, правим функцию и нажимаем C-c C-c, что приведет её перекомпиляции;
4. переходим в Slime REPL и тестируем изменения;
5. повторяем с шага 3.
Упомянутая выше аббревиатура ASDF расшифровывается как «Another System Definition Facility». Этой система позволяет указать способ сбора нескольких файлов в единую систему для их загрузки или компиляции одной командой. Чем-то походит на Make.
Как сделать исполняемый файл?
Ответ зависит от используемой вами реализации. Смотрите в документации. Если говорить про SBCL:;; Загружаете приложение в SBCL, затем выполняете команду save-lisp-and-die.
;; Точка входа в приложение — MY-FUNCTION.
(save-lisp-and-die "my.exe":executable t: toplevel 'my-function)
FUNCALL и APPLY — в чем разница, что использовать?
Короткий ответ: везде, где можно используйте FUNCALL, в остальных случаях используйте APPLY.
Развернутый ответ: при вызове FUNCALL должно быть известно количество аргументов. APPLY (и MULTIPLE-VALUE-CALL) не требует информации о количестве аргументов.
(defun map-list-with-1 (function list arg)
(mapcar (lambda (elt)
(funcall function elt arg))
list))
(defun map-list-with-n (function list &rest args)