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が構文的に問題ないことを示しています。

私は何が間違っているのですか?(ql:quickload "test')を使用するとfooがバインドされないのはなぜですか?

これが私のパッケージファイルです:

;;;; 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 に答える