【问题标题】:Bad Syntax with let in LISPLISP 中的 let 语法错误
【发布时间】:2012-09-12 09:49:05
【问题描述】:

我在尝试运行代码时不断收到此错误:

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

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

【问题讨论】:

  • @RainerJoswig 错误消息中出现“错误语法”这句话几乎是在使用 Scheme 的一个死板。 :-)
  • @Chris Jester-Young:是的,但是哪一个?我不想猜测正在使用什么,而是将此信息作为问题的一部分。例如,他是否与某种“命名让”作斗争?

标签: recursion lisp let


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2010-10-13
    • 1970-01-01
    • 2015-06-04
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多