答えて
'(2 . 3)
は点線のペアです。
(cons 2 3)
もドット付きペアを作成します。だから、これらは同じものに評価されるべきです。
したがって、1つはドットペアのリテラルであり、もう1つはドットペアを作成します。
実際には 'cons'はsetf可能な場所を生成し、' quote'は修正してはいけない定数値を生成する点で違いがあります。 – thodg
REPLで同じ値に評価されていても、まったく同じではありません。短所細胞を破壊変性されたこれらの例を考慮してください。これに比べ
TEST> (defun literal-cons()
(let ((cons '(1 . 2)))
(incf (cdr cons))
cons))
LITERAL-CONS
TEST> (literal-cons)
(1 . 3)
TEST> (literal-cons)
(1 . 4)
TEST> (literal-cons)
(1 . 5)
:最初のバージョンで
TEST> (defun non-literal-cons()
(let ((cons (cons 1 2)))
(incf (cdr cons))
cons))
NON-LITERAL-CONS
TEST> (non-literal-cons)
(1 . 3)
TEST> (non-literal-cons)
(1 . 3)
は、この、このように(コード自体にliteralコンス・セルを変更します自己修正コードです)。 2番目のバージョンでは、コンスセルはリテラルではありません。コードが呼び出されるたびに生成され、この新しいコンスセルのみが変更されます。
TEST> (function-lambda-expression #'literal-cons)
(LAMBDA NIL
(DECLARE (CCL::GLOBAL-FUNCTION-NAME LITERAL-CONS))
(BLOCK LITERAL-CONS (LET ((CONS '(1 . 5))) (INCF (CDR CONS)) CONS))) ;; notice the '(1 . 5)
NIL
LITERAL-CONS
破壊的な操作を使用すると微妙なバグが発生する可能性があるため、コード内のこのようなリテラルオブジェクトには注意が必要です。これはコンスセルから構築されたリストリテラル('(1 2 3)
対(list 1 2 3)
)にも影響します。 HyperSpecから
:
リテラルADJ。 (オブジェクトの)直接プログラムで参照されるよりもむしろ です。つまり、データとして 見積もりフォームに表示されます。オブジェクトが自己評価オブジェクトの場合は、引用符なしのデータとして と表示されます。 ``のフォーム(短所 "1" '( "2"))、式 "1"( "2")、および "2" はリテラルオブジェクトである。'」
あなたの 'literal-cons'関数の振る舞いは、あなたの実装に特有でなければなりません。 SBCLでは、結果はあなたの '非リテラルコンス 'として得られます。これは私がそれについて新しい質問を開いたほど興味があります:http://stackoverflow.com/questions/20342793/is-this-an-implementation-specific-behavior – johnbakers
@OpenLearner Right;リテラルデータを変更した結果は、標準によって定義されていません。なんでも起こる可能性がある。私はこの答えに示されている例はよくあると思いますが、SBCLはここで面白い何かをしているようです... –
(1 . 2)
でありますcons
セルのs式の構文。コンスセルはcar
として1、cdr
として2を持ちます。
'(1 . 2)
先頭に引用符をつけたものは、(quote (1 . 2))
の短い表記です。 quote
は、評価者に囲まれたフォームを評価しない(!)ように指示し、そのまま返すように指示します。この引用されたフォームの値はフォーム自体に過ぎません。 quote
:評価しないでください。 Common Lispでは、これは定数のリテラルデータと考えることができます。
(cons 1 2)
はLispの前で機能cons
を持つフォームと二つの引数です:私たちは、このフォームを評価した場合は1と2、機能cons
を定義することにより、引数1と2 cons
戻り、新たなコンスセルで呼び出されますその引数はcar
とcdr
です。したがって、(cons 1 2)
は、評価するたびに新しいコンスセルを返します。
両方とも同様の構造を持つオブジェクトです。つまり、両方ともコンスセルであり、CARの位置に2つ、CDRの位置に3つあります。
主な違いは、 '(2.3)は定数であり、(cons 2 3)は新しいコンスセルを生成するということです。
(defun a()
(let ((v (cons 2 3)))
(incf (car v))
v)
(defun b()
(let ((v '(2 . 3)))
(incf (car v))
v)
かなりの数の実装が返されます「(3 3)」(4 3)などのように:あなたは以下のとおり2(類似見て)機能を取る場合は、これらの間の区別が明らかになるはずですあなたは電話をし続けます。b。
これらは同じではなく、同じです。
simbol quote( ')は「これを評価することなくこのリストを作成する」という関数です。 例: '(* 2 2);
関連するペアを作成し、これだけを作成します。 例:リストを作成するために、リストを作成します(* 2 2) (list(* 2 2) (1 2 3 4));作成する(a 1 2 3 4)
作成した2つの関数( ')の前にリストを作成するだけであり、cons関数は "itens"という名前の関連するペアを作成するだけなので、 は引用符('あなたがその機能に与えたもの。
- 1. PythonのLISPの短所
- 2. emacs lispのシンボル名と変数名の違い
- 3. Capybara:複数のドライバの長所と短所
- 4. 複数の地域データベースの長所と短所
- 5. パターン「一つの活動、複数のビュー」:長所と短所
- 6. 連結:文字列、短所と変数
- 7. カサンドラの長所と短所ユーザー定義関数
- 8. newid()とnewsequentialid()の違いと長所と短所は何ですか?
- 9. VB.NETのCallbyName関数の短所?
- 10. ハスケルの長所と短所
- 11. ストーリーボードの長所と短所
- 12. TreeSetの長所と短所
- 13. 長所と短所
- 14. htmlを変数に格納する長所と短所
- 15. 関数宣言でConstを使うことの長所と短所
- 16. Lispの深い逆関数
- 17. Emacs Lisp:(function(lambda ...))と(lambda ...)の違いは?
- 18. クラス内のヘルパー関数 - さまざまなアプローチの長所と短所
- 19. DFCとDFSの長所と短所は?
- 20. MSMQとAKKAの長所と短所
- 21. ノードサスとギャルプサスの長所と短所
- 22. LuceneのMultiSearcherクラスの長所と短所
- 23. 長所と短所READ_COMMITTED_SNAPSHOT
- 24. UILabel drawTextInRect長所と短所
- 25. ServiceBusアーキテクチャ長所と短所
- 26. LISP - 整数のシーケンス
- 27. ASNA Visual RPG(AVR)の長所と短所
- 28. 長所と短所Googleのアプリケーションエンジンで
- 29. のRabbitMQ同期メッセージング長所と短所
- 30. SQLクエリデザイナの使用長所と短所
それは2番目の式のピリオドかコンマですか? –
@David:回答ピックを変更することができるかどうか疑問に思った。私はダンリーが私のものよりも良いのが好きです。 –