syntax - cond 变量没有值

标签 syntax lisp common-lisp

我是 lisp 的新手。 我只想制作一个短节目。 它是关于测试条件并在条件为真时做某事。 因此,如果 3 modulo 2 不成立(显然不成立),我想打印 7+9+11 的结果。 我收到错误 *** - COND:变量/= 没有值。

我已经尝试将 cond 更改为 when。但它没有用,我得到了同样的错误。

(cond (/= 0 (mod 3 2 ))

做 (+ 7 9 11)

)

我希望结果是 27 而不是错误。

最佳答案

看来您正在尝试进入这样的程序。

(if (/= 0 (mod 3 2))
    (+ 7 9 11))

这里,if 的语法如下

(if (PREDICATE)
    (RETURN-IF-PREDICATE-TRUE)
    (RETURN-IF-PREDICATE-FALSE))

如果未提供,RETURN-IF-PREDICATE-FALSE 默认为 nil

如果你更喜欢使用cond,那么你可以这样做

(cond
  ((/= 0 (mod 3 2)) (+ 7 9 11)))

这里,cond 的语法如下

(cond
  ((P1) (R1))
  ((P2) (R2))
  ...
)

如果谓词 P1 为真,则返回 R1。否则测试下一个谓词,依此类推。

如果您的代码,您的 cond 缺少几个括号。一般来说,你正在做

;; (incorrect code)
(cond
  (P1) do (+ 7 9 11))

谓词-结果对和 do 宏周围缺少括号。

此外,没有理由在这里使用do

关于syntax - cond 变量没有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55948895/

相关文章:

string - 在 Excel 的 VBA 中,当字符串包含 '&' 时如何操作页眉/页脚

javascript - 带有 JavaScript 和构造函数的动态变量名称 : cloning an image with EaselJS dynamically to multiple canvases

在普通的 lisp 中排序子列表

Clojure let 与 Common Lisp let

带有 slime-fancy 的 clojure 和 common lisp 的 emacs 设置 (slime-autodoc)

c++ - 奇怪的模板结构定义

asp.net - Html 编码代码表达式

functional-programming - 为什么我的语法会发生变化?

serialization - 如何从 SBCL 解释器将特定函数写入文件?

将 LET 变量绑定(bind)到 Lisp 中的新值