Common Lisp中LET结合LOOP构造报错:变量FOR未绑定原因咨询
问题分析与解决
错误原因
你编写的let表达式语法不符合Common Lisp规范。在Common Lisp中,let的变量绑定列表要求每个绑定项要么是单个变量名(默认绑定到nil),要么是**(变量名 初始值表达式)**的嵌套列表形式。
你的代码:
(let (liste (loop for item from 1 to 20 collect item)) (format t "~{~a~}~" liste))
被Lisp解析为两个独立的绑定项:liste(直接绑定到nil),以及(loop for item from 1 to 20 collect item)——此时loop被当作普通变量而非循环宏,for也被判定为未绑定的变量,因此触发“变量FOR未绑定”的错误。
修复方法
将变量名与对应的初始值表达式包裹在同一个子列表中,修正后的代码如下:
(let ((liste (loop for item from 1 to 20 collect item))) (format t "~{~a~}~" liste))
这样let会正确识别liste的初始值是loop宏的执行结果,而非把loop当作普通变量处理。
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

