Путаница с лиспом "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
Другие вопросы по тегам