(if '(nil nil)
'print-true
'print-false)
(if '(nil)
'print-true
'print-false)
上記のコードで、Lispインタプリタが常にこれらのフォームをtrue(print-true)と評価するのはなぜですか。nilCommonLispでは間違っていると思いました。
GNUCLISPを使用しています。
nilは偽です。それ以外はすべて真実です。'(nil)は、1 つの要素、つまり を持つリストnilです。は、と'(nil nil)の 2 つの要素を持つリストです。これらの式はどちらもそれ自体と同じではないため、真と見なされます。nilnilnilif
nil は空のリストと同等です。
CL-USER> (if (list ) 'print-true 'print-false)
; prints PRINT-FALSE
CL-USER> (if (list nil) 'print-true 'print-false)
; prints PRINT-TRUE
'(nil) は (list nil) と同等であり、空のリストとは異なります。