Получение переменной foo не связано с попыткой использовать краткое руководство по проекту
Я следовал инструкциям здесь: http://xach.livejournal.com/278047.html и заставил их работать. Я вызвал проект test, поэтому у меня есть файл test.lisp, который выглядит следующим образом:
;;;; test.lisp
(in-package #:test)
;;; "test" goes here. Hacks and glory await!
(defun foo ()
(format t "hello from EMAIL-DB package~%"))
Когда я запускаю (ql:quickload "test"), я получаю: The variable FOO is unbound.
Если я закомментирую строку (in-package #:test), то при загрузке foo больше не освобождается. Что говорит мне, что функция foo синтаксически в порядке.
Что я делаю неправильно? Почему foo не связан при использовании (ql:quickload "test')?
Вот мой файл пакета:
;;;; package.lisp
(defpackage #:test
(:use #:hunchentoot))
И мой файл test.asd:
;;;; test.asd
(asdf:defsystem #:test
:serial t
:depends-on (#:hunchentoot
#:cl-who
#:postmodern)
:components ((:file "package")
(:file "test")))
1 ответ
Ваш тестовый пакет не использует пакет CL, поэтому ваш DEFUN - TEST::DEFUN (не CL:DEFUN). Для TEST:: DEFUN нет макроопределения, поэтому система переходит к оценке с использованием правил вызова функций, которые должны оценивать каждую подчиненную форму по порядку, а затем применять функцию к значениям аргументов. Первой подчиненной формой является TEST::FOO, которая является поиском переменной, и в вашем изображении нет такой переменной, как TEST:: FOO.