-1

我正在阅读 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
4

2 回答 2

2

if 语句的结构是:

(if condition true-stament false-statement)

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

于 2014-05-22T06:44:54.347 回答
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
于 2014-05-22T10:24:22.927 回答