Лисп: Почему и как '(ноль ноль) оценивается как истина? - PullRequest
5 голосов
/ 14 февраля 2011
(if '(nil nil)
    'print-true
    'print-false)

(if '(nil)
    'print-true
    'print-false)

В коде выше, почему интерпретатор Lisp всегда оценивает эти формы как true (print-true) Я думал nil представлял ложь в Common Lisp.

Я использую GNU CLISP.

Ответы [ 2 ]

11 голосов
/ 14 февраля 2011

nil ложно. Все остальное правда. '(nil) - это список с одним элементом, а именно nil. '(nil nil) - это список с двумя элементами, а именно nil и nil. Ни одно из этих выражений само по себе не совпадает с nil, поэтому if считает его истинным.

2 голосов
/ 14 февраля 2011

ноль эквивалентно пустому списку.

CL-USER> (if (list ) 'print-true 'print-false) 
; prints PRINT-FALSE 
CL-USER> (if (list nil) 'print-true 'print-false) 
; prints PRINT-TRUE

'(ноль) соответствует (список ноль), который отличается от пустого списка.

...