1

我是 Lisp 新手,有一个非常基本的问题。

我正在处理一个包含列表的列表。

(defvar *stationen* nil)

(defun make-station (name uri)
  (list :name name :uri uri))

(defun save-db ()
  (with-open-file (out "list.txt"
                       :direction :output
                       :if-exists :supersede)
    (with-standard-io-syntax
      (princ *stationen* out))))

(defun load-db ()
  (with-open-file (in "list.txt")
    (with-standard-io-syntax
      (setf *stationen* (READ in)))))

(load-db)

数据包含一个 uri http://www....。好吧,当我尝试阅读该列表时,出现以下错误:

The name "HTTP" does not designate any package.
[Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]

我可以猜到为什么会发生这种情况(Lisp 试图将“http”解释为一个包,对吧?)。但是我怎样才能将我的 uri 保存到文件中并再次读取它,而 Lisp 不会抛出这个错误呢?

4

2 回答 2

1

备择方案:

  1. 只需将其写为字符串即可。
  2. 使用 READ-CHAR、READ-LINE 或 READ-SEQUENCE
  3. 高级:使用自定义阅读器宏进行读写

顺便说一句,请发布格式化的 Lisp 代码。

于 2013-02-17T10:55:01.697 回答
0

或者,您可以使用 PRINT 而不是 PRINC 来写出 URL。

于 2013-02-17T19:33:40.577 回答