この質問をする必要があり申し訳ありませんが、変数がif
であるかどうかをチェックする単純なnil
ステートメントを実行しようとしています。
(defun test (input)
(let ((testvar (first input)))
(if (not nil testvar)
(do this)
(do that))))
誰かが私に正しい構文を説明できますか?
nil
はブール値false
と同等であるため、明示的に比較する必要はありません。
シンプルな
(if testvar
(...)
(...))
仕事をします。 not
が必要なのは、反対をチェックする場合のみです。変数がnil
ではないことを確認したい場合:
(if (not testvar)
(...)
(...))
それとは別に、使用する可能性がある null
と呼ばれる述語関数もあります。これは基本的に、指定されたリストが空かどうかを確認するためのものですが、空のリストはnil
と同等であるため、機能します(リンクされたページの例が示すように):
(null '()) => T
(null nil) => T
(null t) => NIL
(null 1) => NIL
とにかく、これは基本的に問題を1層だけ上に移動します;-)
変数がnilか、nilでないかを確認しますか?
非nilの場合:(if v ... ...)
Nilの場合:(if (not v) ... ...)
(CLには)論理的には同じであるが、意図をよりよく示す多くのバリエーションがあります:(if (null v) ... ...)
上記の2番目のケースと同じですが、論理的な誤り(つまり、空のリスト)ではなく、 `() ‘を探していることを読者に示す場合があります。そして、他にもたくさんのバリエーションがあります。
jkiiskiは正しかった:
ちょうど(もし(testvarではない)...)または、真のブランチを最初に置いて実行します(testvar ...の場合)