Подтвердить что ты не робот

Настройка рабочей общей среды Lisp для начинающего Lisp новичка

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

Я на полпути через Touretzky "Gentle Intro" и, только что добравшись до главы о I/O, я хочу выйти за пределы набора текста в REPL, когда я просматриваю книгу и упражнения. Проблема в том, что я не могу найти достойного учебного пособия по созданию достойной рабочей среды.

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

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

Приветствуем всех и всех указателей.

EDIT: Моя платформа FreeBSD/amd64, и я предпочитаю решения с открытым исходным кодом.

4b9b3361

Ответ 1

Предположим, что у вас есть 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. (Я также рассматриваю причудливый отступ, и autodoc essential.)

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

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

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

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

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

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

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

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

Другой способ приведения функций в выполняемый Lisp заключается в компиляции и загрузите весь файл с помощью C-c C-k.

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

Удачи!

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

Ну, хорошим местом для начала будет выполнение lisp раздела информационных страниц.

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

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

wiki имеет много хорошей информации.

Ответ 6

Существуют различные способы настройки среды 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, которые я не буду здесь повторять.

Ответ 7

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