编译此函数时,我一直收到随机错误:
(defun gcd (a b)
(if (= b 0)
a
(gcd b mod (a b))))
最常见的是它表示“未定义的功能a”。所以我想我需要在那个地方返回一个。这没用。我得到了if语句错误的许多参数。知道我在这里做错了什么吗? Lisp的新手,到目前为止,我们并没有一致看待。
在Windows 7上运行CLISP。
答案 0 :(得分:6)
在Lisp中,函数调用总是*以'('开头,所以行
(gcd b mod(a b))
表示“使用参数gcd
,b
调用函数mod
,并使用参数a
调用函数b
的结果。”
我怀疑你真的想要这样的东西:
(gcd b (mod a b))
*我有一段时间没有使用过Lisp,所以在“always”上我可能不会100%正确。
答案 1 :(得分:2)
(gcd b mod(a b))
应为(gcd b (mod a b))
答案 2 :(得分:1)
您mod
函数调用错误。这是我的工作代码:
(defun gcd2(a b)
(if (= b 0) a (gcd2 b (mod a b))))
答案 3 :(得分:0)
通常编译器可以为您提供更多信息:
使用LispWorks:
(defun gcd1 (a b)
(if (= b 0)
a
(gcd1 b mod (a b))))
CL-USER 31 > (compile 'gcd1)
;;;*** Warning in GCD1: GCD1 is called with the wrong number of arguments: Got 3 wanted 2
;;;*** Warning in GCD1: MOD assumed special
The following function is undefined:
A which is referenced by GCD1
GCD1
因此,您看到使用错误数量的参数调用GCD1
,假定MOD
是变量,并假定A
是函数。
SBCL:
; in: DEFUN GCD1
; (GCD1 B MOD (A B))
;
; caught WARNING:
; The function was called with three arguments, but wants exactly two.
; in: DEFUN GCD1
; (A B)
;
; caught STYLE-WARNING:
; undefined function: A
; (GCD1 B MOD (A B))
;
; caught WARNING:
; undefined variable: MOD