我正在阅读Conrad Barski的Land of Lisp,我对'if'命令的使用感到有些困惑(仅举几例)..
所以,我理解写'if'()表示列表为空且条件为false,如果'(1)表示列表非空且条件为真。
问题是lisp如何根据if(1)条件的性质(真/假)知道选择和输出哪个表达式?例如,在语句下面的代码中,如果'(1)为真,那么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
答案 0 :(得分:2)
if语句的结构是:
(if condition true-stament false-statement)
换句话说,第一个语句(true-statement
)总是在条件evals为true时发生,第二个语句(false-statement
)在条件eval为false时发生。
答案 1 :(得分:0)
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