首先,我对lisp很新,所以我可能只是遗漏了一些非常明显的东西.也就是说,我在我旁边打开Practical Common Lisp,并在下一个选项卡中打开CL Hyper Spec,并且无法解决此问题:
我正在尝试从文件中读取树,并使用以下代码将值分配给类中的插槽:
(defun load-char (file)
(with-open-file (in file)
(with-standard-io-syntax
(let ((chr-in (read in))
(chr (make-instance 'pc)))
(mapcar #'(lambda (x) (setf (slot-value chr (car x)) (cdr x))) chr-in)
chr))))
Run Code Online (Sandbox Code Playgroud)
当我最初一起攻击它并在cl-user包下运行时,一切都运行得很好 - 实际上,我为自己感到骄傲.当我将它与我的类定义以及新包中的一些辅助函数一起打包时,问题就出现了.我使用asdf加载了包,然后用来(in-package :package-name)
更改我的REPL的活动包.
现在,当我运行时,(load-char "/path/to/file")
我得到一个错误,指出COMMON-LISP-USER::ID
(ID是我的pc类中的第一个插槽)不存在,所以我写这个是为了看看我在读取文件时实际得到的内容:
(defun load-char-test (file)
(with-open-file (in file)
(with-standard-io-syntax
(let ((chr-in (read in))
(chr (make-hash-table)))
(mapcar #'(lambda (x) (setf (gethash (car x) chr) (cdr x))) chr-in)
(maphash #'(lambda (k v) (format t "~a: ~a~%" k v)) chr)
chr)))) …
Run Code Online (Sandbox Code Playgroud) common-lisp ×1