質問
私からの転換を進めることが喫緊の背景日本ではすっかり当たり前にしようと自分の手にLISP(Common LISP)
を読み込みま こちらの 報 cons
その
(連結実績x L)
与えられLISPオブジェクトxおよびリストLの評価(連結実績x L)の作成を含むリストxの要素L.
私が意図的に使っていないがリストとして二つ目の引数ん。eような成分が含まれています
(cons 'a 'a)
見にエラーがぉ!っ (A . A)
.
何だったので買ってきたとは何か (A . A)
?
解決
Cons
を構築しま"連結実績とを意味します。こんまりとしたリストです。を連結する際には、何らかの方法で、つまり、この値です。A連結実績細胞に代表される文書による"点在のペア"など (A . B)
, を保有する値 'A
や 'B
.
二つの場所連結セルと呼ばれる"自動車"や"cdr".化できるなど連結実績細胞としてbisectedブロック:
car cdr
+-----+-----+
| A | B |
+-----+-----+
にLisp値も参考になっても、他のものは、例えば他の連結性細胞
+-----+-----+ +-----+-----+
| A | --------> | B | C |
+-----+-----+ +-----+-----+
このように代表される"点在のペアについて (A . (B . C))
.を継続できるようになります:
+-----+-----+ +-----+-----+ +-----+-----+
| A | --------> | B | --------> | C | D |
+-----+-----+ +-----+-----+ +-----+-----+
この (A . (B . (C . D)))
.ご覧のとおり、そのような構造では、値は常に car
の連結実績細胞の cdr
ポイントの残りの構造です。例外の値は最後の cdr
.する必要がありませんこの例外のもの:が特別な値 NIL
にLispを示した""もの".入 NIL
最終 cdr
, は、ハンディ-センチネルの値は、 すべての お値の car
s:
+-----+-----+ +-----+-----+ +-----+-----+ +-----+-----+
| A | --------> | B | --------> | C | --------> | D | NIL |
+-----+-----+ +-----+-----+ +-----+-----+ +-----+-----+
このリストで構築したLisp.以降 (A . (B . (C . (D . NIL))))
は扱いきれな (A B C D)
. NIL
したものであり、空のリスト ()
;これらのexchangableの表記法を同じことをしているのです。
現在では、なぜ (cons x list)
を返しまう。 Cons
単に構築しまう連結実績細胞 x
の car
への参照 list
の cdr
:
+-----+-----+
| X | --------> list
+-----+-----+
ば list
は (A B)
, で整備されており海外から:
+-----+-----+ +-----+-----+ +-----+-----+
| X | --------> | A | --------> | B | NIL |
+-----+-----+ +-----+-----+ +-----+-----+
なので、 (cons x '(a b))
評価 (x a b)
.
リストは一つだけのものを使用連結実績細胞も可能ですの構築を任意の木から連結実績細胞は円形のリスト、有向グラフト)を付けています。
他のヒント
'a
リスプ原子です (A . A)
aと呼ばれる縮退リストです Cons Cell または「点線のペア」。あなたは議論のリストを渡さなかったので L
の (cons x L)
あなたはセルを取り戻しました。
(cons x l)
xとlが与えられた場合、CONSは、そのセルの車としてxを含む新しいConsセルを、そのセルのCDRとしてlを返します。
リストは、Consセルのリンクされたチェーンです。
CL-USER 141 > (sdraw '(a b c))
[*|*]--->[*|*]--->[*|*]---> NIL
| | |
v v v
A B C
CL-USER 142 > (sdraw (cons 'foo '(a b c)))
[*|*]--->[*|*]--->[*|*]--->[*|*]---> NIL
| | | |
v v v v
FOO A B C
短所が引数として2つのシンボルを取得した場合、次のようになります。
CL-USER 143 > (sdraw (cons 'foo 'bar))
[*|*]---> BAR
|
v
FOO