在普通 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)

变量 iloop 表达式的局部变量。 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 缩进支持,因此您应该使用它来查看代码的结构。