2013-02-17 59 views
1

我是Lisp的新手,有一个非常基本的问题。Lisp:读取包含url的文件

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

(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抛出这个错误?

回答

1

替代方案:

  1. 只要写一个字符串。
  2. 使用READ-CHAR,READ-LINE或读SEQUENCE
  3. 先进:编写和使用自定义宏读者

顺便说一句读,请格式化后Lisp代码。

+0

非常感谢! (这是我第一篇文章,我很高兴我想出了如何发布代码;与其他方面发布代码相比,似乎有点奇怪并且不太实用) – user2080255 2013-02-17 11:22:38

+0

@ user2080255:是的,我使用编辑器将代码转换为正确的。选择一些文本,然后在Emacs中输入'c-u 4 c-x TAB'。使用-4而不是4来换档。 – 2013-02-17 11:25:55

0

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