【发布时间】:2017-04-17 11:32:20
【问题描述】:
我可以在 .txt 文件中说以下列表
(5 3 1)
我正在尝试使用以下源代码将上述列表存储在 LISP 中的变量中。在第一种格式之前,一切似乎都是正确的。但后来我意识到*originalStateVar* 没有被视为具有 3 个原子的列表,而是被视为具有 1 个原子的列表。源码如下:
(defvar *originalStateVar*)
(defun fileInput ()
(let ((i 1)(in (open *originalStateLocation* :if-does-not-exist nil)))
(when in
(loop
for line = (read-line in nil)
while line do
(format t "~a~%" line) ;debug line
(format t "i is <~a>~%" i) ;debug line
(setf *originalStateVar* (list line)) ;storing list in variable
(setf i (+ i 1))) ;debug line
(close in))
(format t "originalStateVar is <~a>" (car *originalStateVar*))
(format t "second element originalStateVar is <~a>~%" (cadr *originalStateVar*))
(format t "third element originalStateVar is <~a>~%" (caddr *originalStateVar*))))
上述代码的输出是:
(5 3 1)
i is <1>
first element originalStateVar is <(5 3 1)>
second element originalStateVar is <NIL>
third element originalStateVar is <NIL>
我能说的只是它将 (5 3 1) 作为单个原子存储在一个列表中,所以它变成了类似于((5 3 1)) 的东西,这就是为什么cadr 返回NIL。
任何有关如何使*originalStateVar* 得到这种对待的帮助,将不胜感激!
【问题讨论】:
标签: lisp common-lisp