If statement 与Lisp混淆;如果;和';反对意见';命令

If statement 与Lisp混淆;如果;和';反对意见';命令,if-statement,common-lisp,land-of-lisp,If Statement,Common Lisp,Land Of Lisp,我正在阅读康拉德·巴尔斯基(Conrad Barski)的《Lisp之地》(Land of Lisp),我对“if”命令的使用感到有点困惑(举几个例子) 所以,我理解写if'()意味着列表为空,条件为假,if'(1)意味着列表为非空,条件为真 问题是lisp如何知道根据if(1)条件的性质(真/假)选择和输出哪个表达式?例如,在语句下面的代码中,如果“(1)为true,那么lisp如何以及为什么选择表达式I-AM-true作为输出 (if '(1) 'i-am-true 'i-a

我正在阅读康拉德·巴尔斯基(Conrad Barski)的《Lisp之地》(Land of Lisp),我对“if”命令的使用感到有点困惑(举几个例子)

所以,我理解写if'()意味着列表为空,条件为假,if'(1)意味着列表为非空,条件为真

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

(if '(1)
    'i-am-true
    'i-am-false)
I-AM-TRUE
类似地,在下面的示例中,它是如何以及为什么输出这种情况的

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

if语句的结构为:

(if condition true-stament false-statement)

换句话说,第一条语句(
true语句
)总是在条件求值为true时发生,第二条语句(
false语句
)总是在条件求值为false时发生。

如果像这样使用特殊形式:

(如果谓词-结果替换)
在Common Lisp中,假值是空列表
nil
,由
nil
()
表示。真值是
T
,其他每一个值不是
nil
。如果谓词计算除
nil
之外的任何值,则为true,并计算结果。如果不是,则对备选方案进行评估

(取消“我的不是”(x)
(如果x无t))
(我的不是());==>T
(我的不是零);==>T
(我的不是“()”;==>T
(我的不是“零”);==>T
(我的不是t);==>无
(我的不是‘这是一个真实值);=>无

谢谢Anon,所以简而言之,我应该先写我的真实陈述,然后再写我的虚假陈述,反之亦然。非常感谢,非常感谢Anon@user3619045如果这回答了你的问题,那么你应该这样做。你看过文档了吗
if
接受两个或三个参数(第三个参数默认为
nil
,如果未提供),第二个参数始终是“then”部分,第三个参数始终是“else”部分。这不是“选择”;这只是特殊运算符的语法。这个问题似乎离题了,因为它是关于语言中的一个基本条件运算符,在文档中得到了明确的回答。文档中明确回答的问题不属于StackOverflow(请参阅)。我猜在这里,但我认为这是让您困惑的地方。在公共lisp中,唯一值NIL用于表示false。它还表示空列表。也就是说NIL等于()。所有其他值均视为真。除此之外,NIL对其自身进行评估。所以(如果’()‘是’否)等同于(如果’()‘是’否)和(如果‘是’否)。感谢你的回答ben。嗨,Joshua,文档确实显示了某个函数的结果,但是没有解释if‘condition’语句,anon把它漂亮地放在一行中。如果我是一名中级程序员,网络上到处都是例子,我就不会费心了。。但事实并非如此。。网络上严重缺乏lisp支持。。我从一份文件中学到了我所能学到的东西,但确实会出现混乱。无论如何,谢谢你的反馈。谢谢你的回复。。对迟来的回复表示歉意。