我对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。”
我真的不确定为什么这不应该起作用,因为这是我以前看过打印过的列表,所以任何帮助都会非常感激!
答案 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"((