使用LISP中的错误语法

时间:2012-09-20 03:22:34

标签: recursion lisp let

尝试运行代码时,我一直收到此错误:

(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)))))

我的函数应该定义递归取幂,但是我遇到了问题。

1 个答案:

答案 0 :(得分:7)

您在lambda之前缺少左括号,而let表单缺少正文。此外,您不能使用let来定义递归函数;你需要使用letrec(对于Scheme)或labels(对于Common Lisp)。也许你的意思是这个(方案):

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