gpt4 book ai didi

lisp - 在这种情况下我如何使用 "loop for"?

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:15 25 4
gpt4 key购买 nike

以下代码将引发:SYSTEM::%EXPAND-FORM: (SETQ NUM (SUBSTRING LINE 6)) 应该是一个 lambda 表达式。

(defun good-red ()
(let ((tab (make-hash-table)))
(dotimes (i 50) (setf (gethash (+ i 1) tab) 0))
(with-open-file (stream "ssqHitNum.txt")
(loop for line = (read-line stream nil)
until (null line)
do (
(setq num (substring line 6))
(print line)
)))))

如果我如下更改“do”,它就会起作用。但是,我需要在这里做很多事情。

 ...
do (print line)
...

此致!

最佳答案

您需要像这样删除最外层的括号。

(loop for line = (read-line stream nil)
until (null line)
do
(setq num (substring line 6))
(print line))

循环体周围有一个隐式的 progn,当你添加额外的括号时,读者会期待列表中的第一件事(在这种情况下 (setq num (substring line 6 )) 成为一个带有函数的符号。显然 setq 形式不符合该标准,因此它会失败,尽管我不确定为什么它告诉你它应该是一个lambda 表达式。

样式注释:

不要像在 Java 或 C++ 中那样使用大括号!

do (
&body
)

是糟糕的 Lisp 风格,在我的答案中关闭最后一行的所有括号,并在左括号开始的形式所在的同一行打开括号。

关于lisp - 在这种情况下我如何使用 "loop for"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7494200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com