Противоречивая (?) Функция 'FORMAT' в emacs и SBCL - PullRequest
2 голосов
/ 02 февраля 2011

У меня есть Emacs с SLIME и SBCL. И я застрял с проблемой, что emacs имеет определение 'FORMAT' как format string & rest объектов, поэтому при REPL, когда я пытаюсь оценить что-то вроде (format t "hello"), я получаю ошибку : Неверный аргумент типа: stringp, t .

Это случай переопределения функции? Как я могу заставить emacs использовать функцию, определенную в SBCL?

Думаю, это довольно простая проблема новичка, но поиск по ключевому слову "format" очень сложен :)

Ответы [ 2 ]

8 голосов
/ 02 февраля 2011

Emacs Lisp и Common Lisp (его реализация SBCL) - два различных языка; это как если бы вы спрашивали, как вызвать Java System.out.println из вашего Emacs Lisp.

Emacs Lisp используется для расширения и настройки поведения или Emacs.

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

SLIME - это инструмент для общения с работающим Common Lisp образом из Emacs, сначала вы должны запустить его с M-x slime; после запуска SLIME вы можете отправлять формы в работающий образ Common Lisp (в вашем случае SBCL) в буфере *slime-repl sbcl*.

Вы найдете еще один буфер с именем *scratch*, в котором вы можете набирать и оценивать Emacs Lisp форм. Просто помните, что это не имеет ничего общего с Common Lisp.

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

Да, поначалу это может сбивать с толку, но не волнуйтесь, это только временно.

Edit: Я хотел бы добавить, что если вы заинтересованы в Common Lisp, вам следует прочитать одну или все следующие книги:

С другой стороны, если вы заинтересованы в расширении и настройке самого Emacs, вам следует прочитать следующую книгу:

Удачи.

1 голос
/ 03 февраля 2011

После некоторого расследования я обнаружил, что сценарий инициализации SLIME в файле конфигурации .emacs был неверным. Так что, пока я использовал inferior-lisp, это был не SBCL. Вот ссылка, объясняющая суть вопроса: slime-devel list . Итак, я изменил (setq inferior-lisp-program "/some/path/to/sbcl/executable.exe") на (setq inferior-lisp-program "sbcl") в конфигурационном файле. И это привело меня к SBCL в его совершенной природе:)

...