3

両方

(not 'nil)

(not nil)

に評価するTので、との間に違いは'nilありnilますか?そして、どう''nilですか?''nilに評価する場合、同様に評価する'nilべきではありませんか?''nilnil

4

3 に答える 3

8

(quote <anything>)<anything>文字通り、に評価されます。表記'<anything>はを意味(quote <anything>)し、それが何であるかに関係なく、<anything>評価されずに単に返されます。

さらに、nilそれ自体に評価します。

他のオブジェクトは、リテラルとして引用されると、それ自体に評価されます。特定のシンボルとすべての非シンボリックアトムはこのようになります。

'2との違いは何2ですか?彼らは両方とも評価し2ます!

'"abc"また、と"abc"、およびと:fooの違いは何':fooですか?

違いは、それ'2がフォームであるの(quote 2)に対し、2はだけであるということです2。それらは同じものに評価されますが、同じものではありません。

Lispを評価するということは、データが式のソースコードとして扱われることを意味します。2つの式は同じ値を持つことができますが、異なるデータで構成されます。たとえば4、、(+ 2 2)および(* 2 2)

4言う、との違いは何(+ 2 2)ですか?

両方が4を生成する場合4(+ 2 2)なぜ'4生成する4のに'(+ 2 2)生成するの(+ 2 2)ですか?

引用は、「このプログラムコードを、それが示す値ではなく、データとして提供してください」という意味です。

于 2012-04-04T14:03:02.827 に答える
6

評価すると、 NILという名前の変数NILの値が取得され、評価すると、NILという名前のシンボルが取得されます。ただし、これら2つのことは、仕様によって同じオブジェクトとして定義されています。nilのHyperspecを参照してください:'NIL

niln "NIL"パッケージで指定されたシンボルであるオブジェクトCOMMON-LISP、空のリスト、falseを表すブール値(または一般化されたブール値)、および空の型の名前。

あなたは自分でそれをチェックすることができます:

(eq NIL 'NIL) ==> T

ただし、同等性はそこで止まります。''NILリストに評価されます(quote NIL)

于 2012-04-04T12:07:23.050 に答える
1

評価の結果だけを考えれば違いはありません。

nil

'nil

同じ値(つまり、nil)に評価します。ただし、読者に関する限り、真の違いがあります。

nil  ===> nil

一方

'nil ===> (quote nil)

これは、次のようなネストされたフォームがある場合に特に興味深いものです。

((nil) 'nil)

これは次のように読み取られます

((nil) (quote nil))
于 2012-04-04T12:07:12.363 に答える