Настройка рабочей среды Common Lisp для начинающего новичка Lisp - PullRequest
16 голосов
/ 09 июля 2009

Я был системным администратором UNIX в течение долгого времени, и кроме автоматизации задач с помощью сценариев оболочки, некоторой легкой работы на PHP и нескольких простых программ на C, я никогда не делал много в программировании. Недавно я решил немного напрячься и изучить Common Lisp.

Я на полпути к «Нежному вступлению» Турецкого, и, только что дойдя до главы о вводе / выводе, я хочу выйти за рамки ввода текста в REPL, пока я прохожу книгу и упражнения. Проблема в том, что я не могу найти подходящее руководство / учебное пособие по созданию достойной рабочей среды.

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

Было бы действительно намного приятнее, если бы я нашел приличное введение в настройку среды Emacs для Common Lisp, которое позволило бы мне редактировать в режиме Lisp в одном окне (функция автозавершения функции и переменной была бы действительно хороша здесь), смотрите результаты оценки одного выражения (как выходного, так и возвращаемого значения) в другом, а также сможете указать весь буфер для оценки и «запустить», пока я вижу результаты где-то.

Любые и все указатели будут с благодарностью.

РЕДАКТИРОВАТЬ: Моя платформа FreeBSD / amd64, и я предпочитаю решения с открытым исходным кодом.

Ответы [ 7 ]

29 голосов
/ 09 июля 2009

Предположим, у вас запущен emacs и вы получили SLIME из CVS и установил его. Это должно быть легко с любым дистрибутивом Linux; apt-get install emacs slime делает это для меня. (Вам также следует установить SBCL, лучшую реализацию Common Lisp.)

SLIME из коробки больше ничего не делает, поэтому ему нужно конфигурации. Конфигурирование emacs выполняется в вашем файле ~/.emacs. Посетите этот файл (C-x C-f ~/.emacs). У меня есть что-то вроде этого, который загружает множество вкусностей:

(eval-after-load "slime"
  '(progn
     (setq slime-lisp-implementations
           '((sbcl ("/usr/bin/sbcl"))
             (ecl ("/usr/bin/ecl"))
             (clisp ("/usr/bin/clisp"))))
     (slime-setup '(
                    slime-asdf
                    slime-autodoc
                    slime-editing-commands
                    slime-fancy-inspector
                    slime-fontifying-fu
                    slime-fuzzy
                    slime-indentation
                    slime-mdot-fu
                    slime-package-fu
                    slime-references
                    slime-repl
                    slime-sbcl-exts
                    slime-scratch
                    slime-xref-browser
                    ))
     (slime-autodoc-mode)
     (setq slime-complete-symbol*-fancy t)
     (setq slime-complete-symbol-function
  'slime-fuzzy-complete-symbol)))

(require 'slime)

Если в вашем «каталоге сайтов» не установлен SLIME, вы также хочу добавить это перед этими строками:

(add-to-list 'load-path "~/elisp/slime/")
(add-to-list 'load-path "~/elisp/slime/contrib")

(Измените эти пути в правильное местоположение, конечно.)

Ключевой частью является настройка слизи, которая загружает множество дополнительных модули, в том числе REPL. (Я также считаю причудливый отступ, и автодок необходимо.)

В любом случае, вы можете загрузить это в свой запущенный emacs с помощью M-x eval-buffer, или поместив точку внутри каждого пола и нажав C-M-x. (Вы также можете указать на конец секса и нажать C-x C-e. Существует множество способов оценить Emacs Lisp в Emacs, но это не очень важно для изучения CL.)

На этом этапе вы сможете набрать M-x slime и перейти к ваш ответ. Прежде чем это произойдет, ваш список будет загружен, SLIME будет скажи ему, чтобы скомпилировать Swank (сторона CL SLIME), и ты увидишь, что бывает. Это происходит только один раз, но в следующий раз SLIME запустится быстрее.

В REPL вы можете вводить команды Common Lisp и видеть результат их оценка. Нажатие клавиши TAB для завершения чего-либо вызовет окно возможных завершений; это умное завершение, поэтому печатать что-то вроде "d-b" вызовет список, содержащий «Деструктурирующий-связывать». Очень полезно. M- / также завершит символы что вы уже набрали где-то внутри Emacs; другое прекрасное время заставки. (Это работает везде в Emacs, кстати, и называется "динамическим расширение аббревиатура ".)

Ранее вы сказали, что REPL был скучным, поэтому давайте откроем настоящий файл. Нажмите C-x C-f test.lisp. Не удивительно, что это откроет буфер редактирования test.lisp, который будет создан при первом сохранении файл (C-x C-s). Этот файл Lisp знает о SLIME, так что ничего тип можно легко проверить с помощью запущенного Lisp. Завершение вкладки, Доступна проверка класса, интерактивное тестирование и т. д.

Например, введите что-то вроде (+ 1 2) и нажмите C-x C-e. Вы увидим результат, оцененный запущенным Лиспом, внизу окна. Это позволяет вам тестировать отдельные выражения при вводе их в файл.

Следующим шагом является написание полной функции, возможно:

(defun my-1+ (x)
    (+ x 1))

Вы можете загрузить эту функцию в работающий Lisp различными способами; Я обычно использую C-M-x. Теперь вы можете вернуться обратно в буфер REPL (C-x b *slime-repl sbcl* или аналогичный) и введите (my-1+ 42) и посмотрите результат 43 напечатан.

Еще один способ перенести функции в работающий Лисп - это скомпилировать и загрузите весь файл с помощью C-c C-k.

В любом случае, это основы использования SLIME и Emacs. Есть очевидно, доступно гораздо больше функций, но это должно дать вам вкус программирования на Лиспе с SLIME. Последнее, что я упомяну, Emacs в значительной степени самодокументируется, поэтому, если вы хотите узнать больше, Emacs могу помочь тебе. Находясь в буфере Lisp, вы можете набрать C-h m, чтобы получить полный список команд, которые вы можете использовать при редактировании Lisp. Вы можете нажать ссылки для получения дополнительной информации о каждой функции.

Веселись!

5 голосов
/ 09 июля 2009

Не отказывайтесь от Vi / Vim только потому, что большой процент людей любит Slime.

Я писал об этом раньше здесь, на SO. Проверьте это:

Я буду рад ответить на конкретные вопросы здесь.

3 голосов
/ 09 июля 2009

Lispbox & SLIME - хорошие ответы, но если вы хотите что-то еще более простое, просто поиграйте, вы можете рассмотреть бесплатную версию LispWorks Personal или Allegro CL Free Edition . Я не использовал ни один на Linux, но они оба, похоже, идут с графическим интерфейсом. Будет размер кучи или другие ограничения (поскольку полные версии не являются бесплатными), но в них может быть легче погрузиться.

3 голосов
/ 09 июля 2009

Вы пробовали Lispbox ?

2 голосов
/ 09 июля 2009

Существуют различные способы настройки среды Lisp, от ручного подхода до готовых установщиков.

Следующий ответ относится к clbuild , который всегда загружает для вас новые версии всех пакетов:

Предполагая, что у вас уже установлены Emacs и SBCL, следующее поможет вам запустить SLIME. (Вам также нужны bash, darcs, CVS и т. Д., Но порты FreeBSD включают все это, насколько я знаю.)

$ darcs get --set-scripts-executable http://common-lisp.net/project/clbuild/clbuild
$ ./clbuild/clbuild install slime
$ ./clbuild/clbuild slime

Вам не нужно (на самом деле, не следует) изменять ваши .emacs для этого. Если вы играли с ручной установкой SLIME раньше, очистите старые изменения от .emacs. clbuild выполняет настройку слизи для вас.

Если хотите, clbuild также может выбрать и построить для вас последний SBCL:

$ ./clbuild/clbuild install sbcl
$ ./clbuild/clbuild compile-implementation sbcl
# afterwards you can uninstall the FreeBSD-provided Lisp used for bootstrapping

Что касается вопросов об использовании:

  • C-x 5 2 дает вам второе окно для игры с
  • C-c C-k компилирует и загружает текущий буфер
  • Существует встроенная функция завершения вкладки, а также другие функции завершения. Лично мне нравится нечеткое завершение C-c M-i.
  • Ответ jrockway содержит дополнительные полезные советы по командам emacs, которые я не буду повторять здесь
2 голосов
/ 09 июля 2009

Ну, для начала лучше всего будет раздел , выполняющий lisp страниц info .

В общем, когда вы работаете с интерпретируемым языком в Emacs, вы редактируете исходные файлы и взаимодействуете с подчиненным процессом (новый процесс, порожденный Emacs, в данном случае процесс lisp). Вы можете оценить sexp (сбалансированное выражение), регион или весь буфер с помощью простых нажатий клавиш. Эти команды отправляют код в процесс lisp и оценивают его.

Эта модель использования работает для оболочек, Tcl, lisp, всего с интерпретатором ...

Вики содержат много полезной информации .

0 голосов
/ 09 июля 2009

Я могу сказать, что Emacs - хорошая среда для написания Lisp, так как я использовал его в колледже для этой цели. Буфер *scratch* обеспечивает хорошее место для тестового кода. В документации по компилятору должно быть указано, как их вызывать, чтобы вы могли записывать свои файлы на диск и затем запускать их в окне оболочки или использовать один из режимов Emacs для интеграции edit-compile-and-run. (Извините, я не более конкретен, прошло уже 15 лет.)

...