両方
(not 'nil)
と
(not nil)
に評価するT
ので、との間に違いは'nil
ありnil
ますか?そして、どう''nil
ですか?''nil
に評価する場合、同様に評価する'nil
べきではありませんか?''nil
nil
両方
(not 'nil)
と
(not nil)
に評価するT
ので、との間に違いは'nil
ありnil
ますか?そして、どう''nil
ですか?''nil
に評価する場合、同様に評価する'nil
べきではありませんか?''nil
nil
(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)
ですか?
引用は、「このプログラムコードを、それが示す値ではなく、データとして提供してください」という意味です。
評価すると、 NILという名前の変数NIL
の値が取得され、評価すると、NILという名前のシンボルが取得されます。ただし、これら2つのことは、仕様によって同じオブジェクトとして定義されています。nilのHyperspecを参照してください:'NIL
niln 。
"NIL"
パッケージで指定されたシンボルであるオブジェクトCOMMON-LISP
、空のリスト、falseを表すブール値(または一般化されたブール値)、および空の型の名前。
あなたは自分でそれをチェックすることができます:
(eq NIL 'NIL) ==> T
ただし、同等性はそこで止まります。''NIL
リストに評価されます(quote NIL)
。
評価の結果だけを考えれば違いはありません。
nil
と
'nil
同じ値(つまり、nil
)に評価します。ただし、読者に関する限り、真の違いがあります。
nil ===> nil
一方
'nil ===> (quote nil)
これは、次のようなネストされたフォームがある場合に特に興味深いものです。
((nil) 'nil)
これは次のように読み取られます
((nil) (quote nil))