2009/05/11

[scheme]listの破壊的な操作

WS0749

副作用丸出しでlistを操作してみます。しかし気持ち悪いですねー副作用って。

 

Schemeによる記号処理入門」P.38~

(define x '(1 2))
;; => x


(set-car! x 'foo)
;; =>  #<undef>


x
;; => (foo 2)

xのcar部を破壊的に書き換えています。RubyやSchemeでおなじみの!のついた手続きは実に怖いですねぇ。

 

(define x '(foo baz))
;; => x


(define y (cons 'bar x))
;; => y


y
;; => (bar foo baz)


(set-car! x 8)
;; =>  #<undef>


y
;; => (bar 8 baz)

yがxを参照している状態でxを書き換えているのでyの評価値も変わるということですね。なんのことはない、手続き型やOO言語では日常的に行っていることです。

しかし、Schemeのコードで見るととても新鮮ですねー。

 

C#では参照、C/C++なんかではポインタがらみの話になるんでしょうね(C/C++やったことないのでなんともいえませんが)。しかしSchemeの本でここまでバリバリ副作用丸出しのコードが載ってるってのも珍しい気がします。逆にとてもおもしろいです。

少し後に大域変数(グローバル変数)と副作用(代入:set!)をゴリゴリ使ってstackとqueueを書いてみるところがあるのでそこも面白そうです。いろんな意味で。

 

しかしどうでしょう、Schemeをやったこと無い人が最初に読む本としては、個人的にはオススメできないかも。おもしろくてわかりやすいけど、やっぱり「The Little Schemer」から入る方がいいような気がする。それか「プログラミングGauche」

Schemeによる記号処理入門

Schemeによる記号処理入門

posted with amazlet at 09.05.10

猪股 俊光 益崎 真治
森北出版
売り上げランキング: 305671

Amazon.co.jp で詳細を見る

The Little Schemer

The Little Schemer

posted with amazlet at 09.03.30

Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 16078

おすすめ度の平均: 5.0

5 小さなScheme処理系で学ぶ数学基礎理論
5 Schemeが好きになります
5 英語であるのが苦痛にならない楽しさ
5 面白いスタイル

Amazon.co.jp で詳細を見る

The Seasoned Schemer

The Seasoned Schemer

posted with amazlet at 09.03.30

Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 18883

おすすめ度の平均: 5.0

5 Little Schemer とセットで

Amazon.co.jp で詳細を見る

プログラミングGauche

プログラミングGauche

posted with amazlet at 09.03.17

Kahuaプロジェクト
オライリージャパン
売り上げランキング: 41303

おすすめ度の平均: 5.0

5 日本が米国に先行している稀な事例

Amazon.co.jp で詳細を見る

0 件のコメント:

コメントを投稿