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