【发布时间】:2020-02-15 14:39:44
【问题描述】:
我有一个函数
(defun read-as-list (filename)
(defparameter parlist(list nil) )
(let ((in (open filename :if-does-not-exist nil)))
(when in
(loop for line = (read-line in nil)
while line do
(defparameter mylist line)
(push mylist (cdr (last parlist)))
;(append parlist (list mylist))
;(print mylist)
;(format t "~a~%" line)
)
(close in)
)
)
(print parlist)
(return-from read-as-list parlist)
)
它只是获取一个文件名并将其读入嵌套列表并返回该列表
我在 down 函数中这样称呼它:
(defun test_on_test_data ()
(print "....................................................")
(print "Testing ....")
(print "....................................................")
(let (con (read-as-list "document1.txt"))
(print con)
)
)
(test_on_test_data)
在函数test-on-test-data中,con打印nil,它不调用函数read-as-list
而不是将文件的内容打印为列表,而是打印nil。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
可能是找不到文件,先用绝对路径试一下确定。
-
不要将 DEFPARAMETER 放在函数中。 DEFPARAMETER 用于声明全局变量。
-
使用 WITH-OPEN-FILE 代替 OPEN/CLOSE
-
RETURN-FROM 不是必需的 - 最后一个值会自动返回。
-
在
test_on_test_data函数中你没有正确使用let!它应该是(let ((con而不是(let (con。let采用列表定义,而不是单个定义。
标签: lisp common-lisp return-value let clisp