私はこの質問をしなければならなくて申し訳ありませんが、nil
かどうかを調べる単純なif
文を実行しようとしています。Lispがnilでない場合
(defun test (input)
(let ((testvar (first input)))
(if (not nil testvar)
(do this)
(do that))))
誰でも私に正しい構文を説明できますか?
私はこの質問をしなければならなくて申し訳ありませんが、nil
かどうかを調べる単純なif
文を実行しようとしています。Lispがnilでない場合
(defun test (input)
(let ((testvar (first input)))
(if (not nil testvar)
(do this)
(do that))))
誰でも私に正しい構文を説明できますか?
jkiiskiが正しくありました。
ちょっと(if(not testvar)...)。または、真の枝を最初に置いて(もしtestvarなら...)
文章的なコメント:もしtestvarがブール値であることが意図されているなら、 '(もしtestvar ...)と'(if(not testvar)...) 'が行く方法です。もしtestvarが何らかの他の種類の値である場合、 '(if(null testvar)...)'と '(if(null testvar)..)'を使うことができます。コンパイラはそれらを同じように最適化する必要がありますが、他の人のためにコードを読みやすくする可能性があります。 –
変数がnilかnilでないかチェックしますか?ゼロの場合(if v ... ...)
:(if (not v) ... ...)
すべての論理と同じであるが、より良い意思を示すことができる多くのバリエーション(CLに)ある:上記第二のケースと同じ場合(if (null v) ... ...)
はないゼロの場合
あなたが論理的な虚偽の代わりに `() 'を探していることを読者に示すかもしれません(空のリスト)。他にもさまざまなバリエーションがあります。
nil
はブール値false
に相当するため、明示的に比較する必要はありません。
(if testvar
(...)
(...))
仕事を行います。反対側を確認したい場合はnot
が必要です。あなたは変数がnil
ではないことを確認したい場合:
(if (not testvar)
(...)
(...))
それとは別に、あなたが使用する可能性がありますnull
と呼ばれる述語関数もあります。これは、基本的に与えられたリストが空であるかどうかをチェックするためのものですが、空のリストがnil
に同等であることから(リンク先のページの例が指摘するように)、それは動作します:
(null '()) => T
(null nil) => T
(null t) => NIL
(null 1) => NIL
とにかく、この基本的にのみ問題を1つ上に移動します;-)
ちょうど '(if(not testvar)...)'です。真の枝を最初に置き、 '(もしtestvar ...)'を実行します。 – jkiiski