Получение переменной 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.

Другие вопросы по тегам