我把編譯此功能時得到的隨機錯誤:「未定義功能的」編寫遞歸GCD用Lisp
(defun gcd (a b)
(if (= b 0)
a
(gcd b mod (a b))))
最常見的是,它說,所以我想我需要在那個地方回來。這沒有奏效。我得到了許多if語句錯誤的參數。任何想法我在這裏做錯了嗎? Lisp新手,迄今爲止我們沒有看到對方。
在Windows 7上運行CLISP
我把編譯此功能時得到的隨機錯誤:「未定義功能的」編寫遞歸GCD用Lisp
(defun gcd (a b)
(if (= b 0)
a
(gcd b mod (a b))))
最常見的是,它說,所以我想我需要在那個地方回來。這沒有奏效。我得到了許多if語句錯誤的參數。任何想法我在這裏做錯了嗎? Lisp新手,迄今爲止我們沒有看到對方。
在Windows 7上運行CLISP
在Lisp的函數調用始終*以 '(',太行
(gcd b mod(a b))
意味着「調用函數gcd
與參數b
,mod
和調用函數a
的結果與參數b
「。
我懷疑你真的想類似:
(gcd b (mod a b))
*我沒有用Lisp的一小會兒,所以我可能不能上「總是」 100%正確。
(gcd b mod(a b))
應該(gcd b (mod a b))
你mod
函數調用是錯誤的。這是我的工作代碼:
(defun gcd2(a b)
(if (= b 0) a (gcd2 b (mod a b))))
通常一個編譯器可以給你更多的信息:
使用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
這將是它。我絕對沒有使用正確的語法來調用mod方法。 – yaegerbomb 2011-04-12 05:56:52