小编rob*_*ips的帖子

Common Lisp:为什么在从文件读取时将符号包含在错误的包中?

首先,我对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

9
推荐指数
2
解决办法
402
查看次数

标签 统计

common-lisp ×1