- 前説
- 要旨:リストは幻想である。コンスセルから成るものをリストとして扱う関数群がある、というだけだ。
- 要旨:同様に、コンスセルから成るものを違うものとした扱う関数群もある。木、集合、ルックアップテーブルだ。
- 要旨:リストは幻想である。コンスセルから成るものをリストとして扱う関数群がある、というだけだ。
- 13.1 木
;; リストとして。
(substitute 10 1 '(1 2 (3 2 1) ((1 1) (2 2))))
;; -> (10 2 (3 2 1) ((1 1) (2 2)))
;; 木として。
(subst 10 1 '(1 2 (3 2 1) ((1 1) (2 2))))
;; -> (10 2 (3 2 10) ((10 10) (2 2)))
なるほど。
- 特になし。
- あれ? '"a"の動作がわからない、、、。考える。
- "a"であれば、これはまずreaderが文字列オブジェクトを生成する。それをevaluatorが評価する。評価した結果は同じ文字列オブジェクトである。それをprinterがR/W eqivalenceで印字する。それが"a"である。
- '"a"の場合。分析の記述を簡単にするために、(quote "a")であるとする。これはまずreaderがLispフォームを生成するのだが、それはリストであり、第一要素はシンボルquoteである。第二要素は、文字列オブジェクトである。このリストをevaluatorが評価する。評価にあたり、quoteはスペシャルフォームであり、その引数位置にあるLispオブジェクトを評価せずにそのまま返却する。よって文字列オブジェクトである。それをprinterがR/W eqivalenceで印字する。それが"a"である。
- "a"であれば、これはまずreaderが文字列オブジェクトを生成する。それをevaluatorが評価する。評価した結果は同じ文字列オブジェクトである。それをprinterがR/W eqivalenceで印字する。それが"a"である。
- ふむ。あたりまえのことだった。
- getfは常にeqで比較。
- 本のremfは例が悪い。次の例が簡明。
CL-USER(32): *plist*
NIL
CL-USER(33): (setf (getf *plist* :a) 2)
2
CL-USER(34): (setf (getf *plist* :b) 3)
3
CL-USER(35): *plist*
(:B 3 :A 2)
CL-USER(38): (remf *plist* :a)
T
CL-USER(39): *plist*
(:B 3)
CL-USER(40): - get-propertiesも中途半端な例だな。簡明な例は次のとおり。
CL-USER(47): *plist*
(:C 0 :B 3 :A 2)
CL-USER(48): (get-properties *plist* '(:a :b))
:B
3
(:B 3 :A 2)
CL-USER(49):
- 特になし。
こつこつ。
0 件のコメント:
コメントを投稿