Obtener la variable foo no está vinculado al intentar usar un tutorial de proyecto rápido
Pregunta
Seguí las instrucciones aquí: http://xach.livejournal.com/278047.html y hacer que funcionen.Llamé a la prueba del proyecto, así que tengo un archivo test.lisp que se parece a:
;;;; test.lisp
(in-package #:test)
;;; "test" goes here. Hacks and glory await!
(defun foo ()
(format t "hello from EMAIL-DB package~%"))
Cuando ejecuto (ql: quickload "test") obtengo: The variable FOO is unbound.
Si comento la línea (in-package #: test), entonces foo ya no está desatado cuando lo cargo.Lo que me dice que la función foo está sintácticamente bien.
¿Qué estoy haciendo mal?¿Por qué foo no está vinculado cuando se usa (ql: quickload "test ')?
Aquí está mi archivo de paquete:
;;;; package.lisp
(defpackage #:test
(:use #:hunchentoot))
Y mi archivo test.asd:
;;;; test.asd
(asdf:defsystem #:test
:serial t
:depends-on (#:hunchentoot
#:cl-who
#:postmodern)
:components ((:file "package")
(:file "test")))
Solución
Su paquete de prueba no usa el paquete CL, por lo que su DEFUN es TEST :: DEFUN (no CL: DEFUN).No hay una definición de macro para TEST :: DEFUN, por lo que el sistema procede a evaluar utilizando el reglas de llamada de función, que son para evaluar cada subformulario en orden, luego aplicar la función a los valores de los argumentos.El primer subformulario es TEST :: FOO, que es una búsqueda de una variable, y no existe una variable como TEST :: FOO en su imagen.