2009年6月30日火曜日

【フムフム本】16章 さまざまなデータ構造


* 16章 さまざまなデータ構造
- 特になし。
** 16.1 ベクタ
- 特になし。
*** 16.1.1 ベクタの由来
- うお。ベクタリテラル、クォートが必要なんだ。。。
なんでだろう。Schemeだから、合理的な理由があるん
だろうけど、思いつかない。ちなみにCommon Lispで
は不要。単なるsharpsign macro。
*** 16.1.2 アクセスと代入
- vectore-refをplaceにしてset!がちゃんと動いた。
gosh> (set! (vector-ref v 0) 100)
#<undef>
gosh> (vector-ref v 0)
100
gosh>
*** 16.1.3 ユニフォームベクタ
- 特になし。
** 16.2 ハッシュテーブルとツリーマップ
- ツリーマップはCommon Lisp標準ではないような。楽
しみ。
*** 16.2.1 ハッシュテーブルの作成
- ハッシュテーブルをつくるときの

gosh> (define table2 (make-hash-table 'string=?))

にて、string=?をquoteしてるのはなんでだろう?
手続きを渡すという意味ではいらんだろう。
やってみる。

gosh> (define table3 (make-hash-table string=?))
*** ERROR: unsupported hash type: #<subr string=?>
Stack Trace:
_______________________________________
0 (make-hash-table string=?)
At line 59 of "(stdin)"
gosh>
なるほど。シンボルからhash typeを特定するという
機構を内蔵しているからなんだろうな。
*** 16.2.2 データの登録と削除
- hash-table-push!。なるほどハッシュの個々の値は
スタックになっているのか。これはこれで便利かも。
*** 16.2.3 その他のアクセス手続き
- hash-table...。これらは総称関数を利用していない
ので、名前が冗長。elispやってるときはそんなに気
にならないんだけど、Schemeでは気になるな。
*** 16.2.4 ツリーマップ
- なるほどこれはこれで便利。Common Lisp標準にはな
かったはず。
** 16.3 ストリーム
- 遅延評価は、可能無限の実装なんだな。
- 特になし。

こつこつ。

0 件のコメント: