1

我已按照此处的说明进行操作:http: //xach.livejournal.com/278047.html并让它们工作。我调用了项目测试,所以我有一个 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")))
4

1 回答 1

2

您的测试包不使用 CL 包,因此您的 DEFUN 是 TEST::DEFUN(不是 CL:DEFUN)。TEST::DEFUN 没有宏定义,因此系统继续使用函数调用规则进行评估,这些规则将按顺序评估每个子表单,然后将函数应用于参数的值。第一个子表单是 TEST::FOO,它是一个变量的查找——并且在您的图像中没有像 TEST::FOO 这样的变量。

于 2011-03-18T17:38:30.273 回答