用 Lisp 编写递归 GCD
编译此函数时,我不断收到随机错误:
(defun gcd (a b)
(if (= b 0)
a
(gcd b mod (a b))))
最常见的是它显示“未定义的函数 a”。所以我想我需要在那个地方返回 a 。这不起作用。我得到了很多 if 语句错误的参数。知道我在这里做错了什么吗? Lisp 新手,到目前为止我们的看法还不一致。
在 Windows 7 上的 CLISP 上运行。
I keep getting random errors when compiling this function:
(defun gcd (a b)
(if (= b 0)
a
(gcd b mod (a b))))
The most common is that it says "undefined function a." So I figured I needed return a in that place. This did not work. I get a to many parameters for if statement error. Any idea what I am doing wrong here? New to Lisp and so far we are not seeing eye to eye.
Running on CLISP on Windows 7.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在 Lisp 中,函数调用总是*以 '(' 开头,因此该行的
意思是“使用参数
b
、mod
调用函数gcd
,使用参数b
调用函数a
的结果”。我怀疑你真的想要这样的东西:
*我有一段时间没有使用 Lisp 了所以我对“总是”的看法可能不是100%正确。
In Lisp a function call always* starts with '(', so the line
means "call the function
gcd
with argumentsb
,mod
and the result of calling functiona
with argumentb
".I suspect you really want something like:
*I haven't used Lisp for a little while so I might not be 100% correct on the "always".
(gcd b mod(ab))
应该是(gcd b (mod ab))
(gcd b mod(a b))
should be(gcd b (mod a b))
您的 mod 函数调用是错误的。这是我的工作代码:
You
mod
function call is wrong. Here's my working code:通常编译器可以为您提供更多信息:
使用 LispWorks:
因此您会看到使用错误数量的参数调用
GCD1
,MOD
被假定为一个变量,并且A
被假定为一个函数。SBCL:
Usually a compiler can give you more information:
Using LispWorks:
So you see that you call
GCD1
with the wrong number of arguments, thatMOD
is assumed to be a variable and thatA
is assumed to be a function.SBCL: