2012-09-20 49 views
1

我不斷收到試圖運行代碼時,此錯誤:錯誤的語法與讓LISP

(let ((exp lambda (x y) (if (= y 1) x (* (exp x (- y 1)) x))))) 

錯誤:

let: bad syntax in: (let ((exp lambda (x y) (if (= y 1) x (* (exp x (- y 1)) x))))) 

我的功能應該定義遞歸冪,但我讓我們遇到問題。

+0

什麼樣的'LISP'?方案? –

+0

@RainerJoswig在錯誤消息中出現短語「錯誤的語法」幾乎是Scheme正在使用中的一個死牌。 :-) –

+0

@Chris Jester-Young:真的,但是哪一個?我不想猜測正在使用的是什麼,而是將這些信息作爲問題的一部分。例如,他是否在與某種'命名讓步'糾纏? –

回答

7

您在lambdalet表單缺少正文之前缺少左括號。此外,您不能使用let來定義遞歸函數;您需要使用letrec(對於Scheme)或labels(對於Common Lisp)。也許你的意思是這樣的(方案):

(letrec ((exp (lambda (x y) 
       (if (= y 1) x 
        (* (exp x (- y 1)) x))))) 
    exp)