2013-02-17 88 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。