【问题标题】:lisp - should be a lambda expressionlisp - 应该是一个 lambda 表达式
【发布时间】:2014-03-04 04:51:28
【问题描述】:

我正在尝试从它所在的函数返回 (values str ((+ x 3) y))。

代码sn-p:

(if (<my condition>)
    (values str ((+ x 3) y))
    (values str ((+ x 2) y)))

给出错误:

(+ X 3) SHOULD BE A LAMBDA EXPRESSION 

(values str (y (+ x 3))) 工作正常。

为什么?

【问题讨论】:

  • 你能多加一点上下文吗?这里 x 和 y 的值是多少?看起来 y 就像一个函数。
  • 你能解释一下((+ x 3) y)做什么或应该做什么吗?
  • 也许 (y (+ x 3)) 应该是文字 '(y (+ x 3)) 或者可能缺少运算符 (* y (+ x 3))?也许你已经定义了函数y

标签: lisp clisp


【解决方案1】:

无法计算 S 表达式 ((+ x 3) y),因为第一个列表元素不可调用(它应该命名为函数或 lambda 表达式)。

所以,为了避免评估,你需要引用它:

(if (<my condition>)
    (values str '((+ x 3) y))
    (values str '((+ x 2) y)))

然后您将返回一个长度为 2 的列表(包含一个长度为 3 的列表和一个符号 y)作为您的第二个值。但是,如果您想返回列表中(+ x 2)y,则需要执行类似

(values str (list (+ x (if <condition> 3 2)) y))

或者可能返回 3 个值而不是 2 个:

(values str
        (+ x (if <condition> 3 2))
        y)

另一方面,y 是一个符号,显然,它在您的图像中命名了一个函数,因此 (y (+ x 3)) 的计算结果很好(它在将 3 添加到 @987654332 的结果上调用函数 y @)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2015-12-20
    • 2011-02-04
    • 2015-01-12
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多