在普通 lisp 中创建 for 循环时未定义的变量 i
Undefined Variable i when creating a for loop in common lisp
我在编译项目欧拉问题 1 的解决方案时遇到问题,SLIME 给我错误 "Undefined variable 'i'",我不知道如何解决它,我一直在寻找解决方案。
(defun sol1 (natnum)
(loop for i from 1 to (1- natnum))
do (if (or (zerop (mod sum i 3))
(zerop (mod sum i 5)))
(incf sum i))
sum)
变量 i
是 loop
表达式的局部变量。 if
在该循环之外,因此该变量不再存在。
您还没有声明或初始化变量 sum
。但是loop
可以自己求和,所以不需要。
并且您为 mod
函数提供了太多参数,它只需要两个参数。我不确定你为什么在那里有 sum
。
(defun sol1 (natnum)
(loop for i from 1 to (1- natnum)
when (or (zerop (mod i 3))
(zerop (mod i 5)))
sum i))
既然您使用的是 SLIME,那么您一定是在使用 Emacs。它具有内置的 Lisp 缩进支持,因此您应该使用它来查看代码的结构。
我在编译项目欧拉问题 1 的解决方案时遇到问题,SLIME 给我错误 "Undefined variable 'i'",我不知道如何解决它,我一直在寻找解决方案。
(defun sol1 (natnum)
(loop for i from 1 to (1- natnum))
do (if (or (zerop (mod sum i 3))
(zerop (mod sum i 5)))
(incf sum i))
sum)
变量 i
是 loop
表达式的局部变量。 if
在该循环之外,因此该变量不再存在。
您还没有声明或初始化变量 sum
。但是loop
可以自己求和,所以不需要。
并且您为 mod
函数提供了太多参数,它只需要两个参数。我不确定你为什么在那里有 sum
。
(defun sol1 (natnum)
(loop for i from 1 to (1- natnum)
when (or (zerop (mod i 3))
(zerop (mod i 5)))
sum i))
既然您使用的是 SLIME,那么您一定是在使用 Emacs。它具有内置的 Lisp 缩进支持,因此您应该使用它来查看代码的结构。