我正在尝试编写一个函数,对所有小于或等于的正整数求和 等于 200,是 6 和 7 的倍数。
我有以下内容:
(defun sumFunction(current sum)
(if (/= current 200)
(if ((eq (mod current 6) 0) or (eq (mod current 7) 0))
(setf sum (+ sum current))
(sumFunction (+ current 1) sum)
)
(sumFunction ((+ current 1) sum)
)
)
它给我以下错误:
递归调用的错误处理程序 (:INVALID-FUNCTION NIL IF "" “~S 作为函数无效。” (EQ (MOD CURRENT 3) 0))
我不确定为什么会出现任何错误。
如果我遵循逻辑,它应该返回我需要的结果。
非常感谢任何帮助! 谢谢
最佳答案
你的代码有两个语法错误,还有一些不符合Lisp风格的问题。请引用下面更正后的代码。
(defun sumFunction(current sum)
(if (/= current 200)
(if (or (eq (mod current 6) 0) (eq (mod current 7) 0))
(sumFunction (+ current 1) (+ current sum))
(sumFunction (+ current 1) sum))
sum))
这是结果。
(sumFunction 20 0)
;=> 5731
关于recursion - lisp 中的无效函数 mod 递归地添加作为某些数字的倍数的总和正整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537039/