Obter a variável foo é desvinculado tentando usar um tutorial rápido de projeto
Pergunta
Segui as instruções aqui: http://xach.livejournal.com/278047.html e os fez trabalhar.Chamei o teste do projeto, então tenho um arquivo test.lisp parecido com:
;;;; test.lisp
(in-package #:test)
;;; "test" goes here. Hacks and glory await!
(defun foo ()
(format t "hello from EMAIL-DB package~%"))
Quando executo (ql: quickload "test"), obtenho: The variable FOO is unbound.
Se eu comentar a linha (in-package #: test), então foo não está mais desvinculado quando eu carrego.O que me diz que a função foo está sintaticamente ok.
O que estou fazendo de errado?Por que foo é desvinculado quando usa (ql: quickload "test ')?
Este é meu arquivo de pacote:
;;;; package.lisp
(defpackage #:test
(:use #:hunchentoot))
E meu arquivo test.asd:
;;;; test.asd
(asdf:defsystem #:test
:serial t
:depends-on (#:hunchentoot
#:cl-who
#:postmodern)
:components ((:file "package")
(:file "test")))
Solução
Seu pacote de teste não usa o pacote CL, então seu DEFUN é TEST :: DEFUN (não CL: DEFUN).Não há definição de macro para TEST :: DEFUN, então o sistema prossegue para avaliar usando o regras de chamada de função, que avaliam cada subformulário em ordem e, em seguida, aplicam a função aos valores dos argumentos.O primeiro subformulário é TEST :: FOO, que é uma pesquisa de uma variável - e não existe uma variável como TEST :: FOO em sua imagem.