Nikodemus' Common Lisp FAQ [Nikodemus Siivola] (fb2) читать постранично, страница - 3
[Настройки текста] [Cбросить фильтры]
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)
Последние комментарии
1 час 22 минут назад
3 часов 52 минут назад
4 часов 48 секунд назад
1 день 15 часов назад
1 день 19 часов назад
1 день 21 часов назад