LISP:该值不是预期的类型LIST

时间:2016-10-23 04:45:29

标签: types lisp common-lisp

我对LISP中的编码非常陌生,我正在尝试编写这个初步的代码片段,将文件中的单词读入参数,然后打印出该列表中的所有单词,以确保所有把话放进去。这就是我到目前为止所做的:

(defparameter *wordlist* nil)

(defun run()
  (get-words-from-file)
  (print-wordlist *wordlist*))

(defun get-words-from-file ()
  (let ((in (open "/Users/levibanks/Desktop/cs352/program3/wordlist.txt")))
    (dotimes (n 500)
      (setq *wordlist* (append (read-line in))))
  (close in)))

(defun print-wordlist (wordlist)
  (when wordlist
    (print (car wordlist))
    (print-wordlist (cdr wordlist))))

当我尝试运行此代码时,它给出了错误“值'褐色'[我正在读出的文件中的一个单词]不是预期的类型LIST。”

我真的不确定为什么这不应该起作用,因为这是我以前看过打印过的列表,所以任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:4)

你应该阅读

特别是,(setq a (append b)) 会将任何内容附加到a的上一个值。

您需要的是

(defun read-lines-from-file (file-name)
  (with-open-file (input file-name)
    (loop for line = (read-line input nil nil)
       while line collect line)))

(defparameter *wordlist* (read-lines-from-file "/Users/levibanks/Desktop/cs352/program3/wordlist.txt"((