Bagaimana cara `mendefun` fungsi dalam sebuah paket?
Maaf, ini adalah pertanyaan Common Lisp pemula yang sangat baru.
Saya sedang mempelajari sistem cadel dan paket umum.
Saya mulai dengan "Panduan Idiot Lengkap untuk Paket Lisp Umum" dari http://cl-cookbook.sourceforge.net/packages.html
Di Bab 1, penulis mendefinisikan fungsi foo
dalam paket:bob
? (make-package :bob)
#<Package "BOB">
? (make-package :jane)
#<Package "JANE">
? (in-package bob)
#<Package "BOB">
? (defun foo () "This is Bob's foo")
FOO
Saya menguji kode ini baris demi baris di REPL saya, tetapi gagal:
; SLIME 2.26
CL-USER> (make-package :bob)
#<PACKAGE "BOB">
CL-USER> (make-package :jane)
#<PACKAGE "JANE">
CL-USER> (in-package bob)
#<COMMON-LISP:PACKAGE "BOB">
BOB> (defun foo () "This is Bob's foo")
; in: DEFUN FOO
; (BOB::DEFUN BOB::FOO NIL "This is Bob's foo")
;
; caught COMMON-LISP:STYLE-WARNING:
; undefined function: BOB::DEFUN
;
; caught COMMON-LISP:WARNING:
; undefined variable: BOB::FOO
;
; compilation unit finished
; Undefined function:
; DEFUN
; Undefined variable:
; FOO
; caught 1 WARNING condition
; caught 1 STYLE-WARNING condition
Dan itu memberi tahu saya:
The variable FOO is unbound.
[Condition of type COMMON-LISP:UNBOUND-VARIABLE]
Apa masalahnya?
Bagaimana cara memperbaiki masalah ini dan membuatnya berhasil?
Sangat berterima kasih.
PS: Lingkungan saya adalah SBCL + quicklisp + slime.
Jawaban
Anda perlu memberi tahu Lisp paket mana yang akan digunakan . Dalam Common Lisp standar tidak ditentukan paket mana yang akan digunakan . SBCL tidak menggunakan satupun. Jika Anda ingin simbol dari paket CL tersedia, Anda harus menggunakan paket itu secara eksplisit .
Paket JANE
* (make-package :jane)
#<PACKAGE "JANE">
* (describe *)
#<PACKAGE "JANE">
[package]
0 internal symbols.
Untuk paket BOB kami menggunakan paket CL:
* (make-package "BOB" :use '("CL"))
#<PACKAGE "BOB">
* (describe *)
#<PACKAGE "BOB">
[package]
Use-list: COMMON-LISP
0 internal symbols.
* (find-symbol "DEFUN" "BOB")
DEFUN
:INHERITED
Simbol DEFUN
tersedia dalam paket BOB.
* (find-symbol "DEFUN" "JANE")
NIL
NIL
Simbol DEFUN
ini TIDAK tersedia dalam paket JANE.