(if '(nil nil) 'print-true 'print-false) (if '(nil) 'print-true 'print-false)
В коде выше, почему интерпретатор Lisp всегда оценивает эти формы как true (print-true) Я думал nil представлял ложь в Common Lisp.
nil
Я использую GNU CLISP.
nil ложно. Все остальное правда. '(nil) - это список с одним элементом, а именно nil. '(nil nil) - это список с двумя элементами, а именно nil и nil. Ни одно из этих выражений само по себе не совпадает с nil, поэтому if считает его истинным.
'(nil)
'(nil nil)
if
ноль эквивалентно пустому списку.
CL-USER> (if (list ) 'print-true 'print-false) ; prints PRINT-FALSE CL-USER> (if (list nil) 'print-true 'print-false) ; prints PRINT-TRUE
'(ноль) соответствует (список ноль), который отличается от пустого списка.