Ottenere la variabile foo non è associato al tentativo di utilizzare un tutorial rapido del progetto
Domanda
Ho seguito le istruzioni qui: http://xach.livejournal.com/278047.html e li ho fatti lavorare.Ho chiamato il test del progetto, quindi ho un file test.lisp che assomiglia a:
;;;; test.lisp
(in-package #:test)
;;; "test" goes here. Hacks and glory await!
(defun foo ()
(format t "hello from EMAIL-DB package~%"))
Quando eseguo (ql: quickload "test") ottengo: The variable FOO is unbound.
Se commento la riga (in-package #: test), foo non è più unbound quando lo carico.Il che mi dice che la funzione foo è sintatticamente corretta.
Cosa sto facendo di sbagliato?Perché foo non è associato quando si usa (ql: quickload "test ')?
Ecco il file del mio pacchetto:
;;;; package.lisp
(defpackage #:test
(:use #:hunchentoot))
E il mio file test.asd:
;;;; test.asd
(asdf:defsystem #:test
:serial t
:depends-on (#:hunchentoot
#:cl-who
#:postmodern)
:components ((:file "package")
(:file "test")))
Soluzione
Il tuo pacchetto di prova non usa il pacchetto CL, quindi il tuo DEFUN è TEST :: DEFUN (non CL: DEFUN).Non esiste una definizione di macro per TEST :: DEFUN, quindi il sistema procede alla valutazione utilizzando l'estensione le regole delle chiamate di funzione, che devono valutare ciascuna sottomaschera in ordine, quindi applicare la funzione ai valori degli argomenti.La prima sottomaschera è TEST :: FOO, che è una ricerca di una variabile e non esiste una variabile come TEST :: FOO nell'immagine.