2016-04-08 9 views
3

私はこの質問をしなければならなくて申し訳ありませんが、nilかどうかを調べる単純なif文を実行しようとしています。Lispがnilでない場合

(defun test (input) 
    (let ((testvar (first input))) 
    (if (not nil testvar) 
    (do this) 
    (do that)))) 

誰でも私に正しい構文を説明できますか?

+2

ちょうど '(if(not testvar)...)'です。真の枝を最初に置き、 '(もしtestvar ...)'を実行します。 – jkiiski

答えて

0

jkiiskiが正しくありました。

ちょっと(if(not testvar)...)。または、真の枝を最初に置いて(もしtestvarなら...)

+2

文章的なコメント:もしtestvarがブール値であることが意図されているなら、 '(もしtestvar ...)と'(if(not testvar)...) 'が行く方法です。もしtestvarが何らかの他の種類の値である場合、 '(if(null testvar)...)'と '(if(null testvar)..)'を使うことができます。コンパイラはそれらを同じように最適化する必要がありますが、他の人のためにコードを読みやすくする可能性があります。 –

1

変数がnilかnilでないかチェックしますか?ゼロの場合(if v ... ...)

(if (not v) ... ...)

すべての論理と同じであるが、より良い意思を示すことができる多くのバリエーション(CLに)ある:上記第二のケースと同じ場合(if (null v) ... ...)はないゼロの場合

あなたが論理的な虚偽の代わりに `() 'を探していることを読者に示すかもしれません(空のリスト)。他にもさまざまなバリエーションがあります。

3

nilはブール値falseに相当するため、明示的に比較する必要はありません。

シンプル

(if testvar 
    (...) 
    (...)) 

仕事を行います。反対側を確認したい場合はnotが必要です。あなたは変数がnilではないことを確認したい場合:

(if (not testvar) 
    (...) 
    (...)) 

それとは別に、あなたが使用する可能性がありますnullと呼ばれる述語関数もあります。これは、基本的に与えられたリストが空であるかどうかをチェックするためのものですが、空のリストがnilに同等であることから(リンク先のページの例が指摘するように)、それは動作します:

(null '()) => T 
(null nil) => T 
(null t) => NIL 
(null 1) => NIL 

とにかく、この基本的にのみ問題を1つ上に移動します;-)

関連する問題