【问题标题】:confusion with Lisp "if" and 'cons' command与 Lisp 的“if”和“cons”命令混淆
【发布时间】:2014-05-22 06:39:46
【问题描述】:

我正在阅读 Conrad Barski 的《Land of Lisp》,我对使用“if”命令(仅举几例)有点困惑..

所以,我知道写 if '() 表示列表为空且条件为假,如果 '(1) 表示列表非空且条件为真。

问题是 lisp 如何知道根据 if(1) 条件的性质(真/假)选择和输出哪个表达式?例如,在语句下面的代码中,如果 '(1) 为真,那么 lisp 如何以及为什么选择表达式 I-AM-TRUE 作为输出?

(if '(1)
    'i-am-true
    'i-am-false)
I-AM-TRUE

类似地,它如何以及为什么在下面的示例中输出 How-does-this-happen..

(if '(1)
    'how-does-this-happen
    'any-guesses)
HOW-DOES-THIS-HAPPEN

【问题讨论】:

  • 您查看过if 的文档吗? if 接受两个或三个参数(第三个默认为 nil,如果未提供),第二个始终是“then”部分,第三个始终是“else”部分。这不是“选择”;这只是特殊运算符的语法。
  • 这个问题似乎是题外话,因为它是关于文档中明确回答的语言中的基本条件运算符。文档中明确回答的问题不属于 StackOverflow(请参阅 meta.stackexchange.com/questions/208372/…)。
  • 我猜在这里,但我认为这让你感到困惑。唯一值 NIL 用于在 common lisp 中表示 false。它也代表空列表。也就是说 NIL 等于 ()。所有其他值都被视为真。此外,NIL 评估它的自我。所以 (if '() 'yes 'no) 等价于 (if () 'yes 'no) 和 (if NIL 'yes 'no)。
  • 感谢您的回复。
  • 嗨 Joshua,文档确实显示了某个函数的结果,但没有解释 if 'condition' 语句,anon 将其精美地放在一行中。如果我是一名中级程序员,并且网上到处都有例子,我不会打扰..但事实并非如此..网上严重缺乏 lisp 支持..我可以从文档,但确实会出现混乱......无论如何,感谢您的反馈。

标签: if-statement common-lisp land-of-lisp


【解决方案1】:

if 语句的结构是:

(if condition true-stament false-statement)

换句话说,第一个语句 (true-statement) 总是在条件 eval 为 true 时发生,第二个语句 (false-statement) 在条件 eval 为 false 时发生。

【讨论】:

  • 谢谢 Anon,所以简而言之,我应该总是先写我的真实陈述,然后再写错误,反之亦然。
  • 非常感谢,非常感谢 Anon。
  • @user3619045 如果这回答了你的问题,那么你应该accept it
【解决方案2】:

if 特殊形式是这样使用的:

(if predicate consequent alternative)

在 Common Lisp 中,false 值是空列表 nil,由 nil() 表示。真值是T 和不是nil 的所有其他值。如果谓词评估除nil 之外的任何内容,则为真,并且对结果进行评估。如果不是,则评估替代方案。

(defun my-not (x)
  (if x nil t))

(my-not ())   ; ==> t
(my-not nil)  ; ==> t
(my-not '())  ; ==> t
(my-not 'nil) ; ==> t
(my-not t)    ; ==> nil
(my-not 'this-is-atruth-value) ; ==> nil

【讨论】:

  • 感谢您的回复 sylwester.. 抱歉回复晚了。
猜你喜欢
  • 1970-01-01
  • 2012-01-06
  • 2020-05-10
  • 2019-10-17
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多