Ошибка в вызове функции
Я начал изучать Lisp по книге Питера Сайбеля, "Практическое использование Common Lisp", создавая по примеру базу данных я столкнулся с проблемой, такой код:
(defvar *db* nil)
(defun dump-db ()
(format t "~a:~10t~a~%~%" *db*))
(dump-db)
Выдаёт ошибку:
*** - APPLY: слишком мало аргументов для #<COMPILED-FUNCTION DUMP-DB-1>
Прежде чем задать вопрос, я почитал о чём пишут на других ресурсах, но моей ситуации не нашёл.
P. S. Вместо Lisp in a Box, как в книге, я использую gnu clisp + vim
Ответы (2 шт):
Какой версией clisp вы пользуетесь? У меня GNU CLISP 2.49.60+ выводит вполне понятное сообщение:
*** - There are not enough arguments left for this format directive.
Current point in control string:
"~a:~10t~a~%~%"
|
Директива ~a печатает значение аргумента, ~10t выводит табуляцию до колонки 10, ~% печатает перевод строки. У вас в формате две директивы ~a и всего один аргумент. Попробуйте так:
(defun dump-db ()
(format t "~a:~10t~a~%~%" "*DB*" *db*))
Макрос format читает список аргументов и заменяет ими поля в контрольной строке.
Для вашего случая подойдет ~1:* - вернутся на один шаг назад по списку аргументов и применить его снова.
(defvar *db* nil)
(defun dump-db ()
"Дублирует каждый аргумент дважды."
(format t "~a:~t~1:*~%" *db*))
CL-USER> (dump-db)
NIL NIL
Ссылки