Путаница с лиспом "if" и команда "cons"
Я читаю Land of Lisp Конрада Барского, и я немного запутался в использовании команды if (если назвать несколько)..
Итак, я понимаю, что запись if '() означает, что список пуст, а условие ложно, а если'(1) означает, что список не пуст, а условие истинно.
Вопрос в том, как lisp узнает, какое выражение выбрать и вывести на основе характера (True/False) условия if(1)? например, в приведенном ниже коде выражение if '(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
2 ответа
Структура оператора if:
(if condition true-stament false-statement)
Другими словами, первое утверждение (true-statement
) всегда происходит, когда условие становится истинным, и второе утверждение (false-statement
) происходит, когда условие становится ложным.
if
специальная форма используется так:
(if predicate consequent alternative)
В Common Lisp ложное значение - пустой список 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