[SML 7039] Re: じゅんテキストブック
AOKI Atsushi
aoki @ sra.co.jp
2005年 2月 26日 (土) 15:42:40 JST
SRA先端技術研究所の青木です。
昨年の末に次のようなアナウンスをさせていただきました。
AOKI Atsushi wrote (29 Dec 2004 11:36:45):
> じゅんのテキストブックに載っているプログラムをチェックして、
> VisualWorks 7.x / 5i.x / 3.x のすべてに対応させました。
> http://www.sra.co.jp/people/aoki/TextbookAboutJun/
> 読み進める際には、Jun611 もしくは Jun499v15 を用いてくださる
> ようお願い申し上げます。年末年始の Smalltalking に、どうぞ!
> なお、絵図が挿入された HTML 版のじゅんテキストブック(浅岡さ
> んのウェブページ)は、新年早々に対応してくれると思います。
やっと絵図が挿入された HTML 版のじゅんテキストブックも修正が
完了したようです。お待たせいたしました。どうぞご利用ください。
http://www.sra.co.jp/people/h-asaoka/study/TextbookAboutJun/
そういえば、VisualWorks に名前空間がサポートされるようになっ
てから、新たに追加されたプログラム制御構造があります。fold:
というメッセージセレクタです。ご存知だったでしょうか?
集まりをレシーバにして、ブロック・クロージャを引数に取ります。
たとえば、次のように用います。
| aCollection aString |
aCollection := Array
with: 'aaa'
with: 'bbb'
with: 'ccc'
with: 'ddd'.
aString := aCollection fold: [:first :second | first , '.' , second].
Transcript
cr;
show: aString printString.
^aString
実行すると、トランスクリプトには「'aaa.bbb.ccc.ddd'」と出力さ
れます。4 つの文字列の間に 3 つのピリオドが挿入されています。
動きをさとるために、fold: のブロック・クロージャの中で第一引
数と第二引数を一段下げて出力するようにしてみましょう。
| aCollection aString |
aCollection := Array
with: 'aaa'
with: 'bbb'
with: 'ccc'
with: 'ddd'.
aString := aCollection fold:
[:first :second |
Transcript
cr;
tab;
show: first printString;
space;
show: second printString.
first , '.' , second].
Transcript
cr;
show: aString printString.
^aString
そうすると、トランスクリプトの出力は、以下の通りになります。
'aaa' 'bbb'
'aaa.bbb' 'ccc'
'aaa.bbb.ccc' 'ddd'
'aaa.bbb.ccc.ddd'
ブロック・クロージャで求めたものが、次にブロック・クロージャ
が評価される際の第一引数になってくるわけです。
名前空間の継承を「Root.Smalltalk.Graphics.CompositeFont」のよ
うに文字列として書き出す場合に多用されているんです。
また、数の集まりの合計を求める際にも重宝するのではないかしら。
| aCollection aNumber |
aCollection := 1 to: 10.
aNumber := aCollection fold: [:first :second | first + second].
Transcript
cr;
show: aNumber printString.
^aNumber
初期合計が 0 と決まっているならば、次のような inject:into: の
プログラム制御構造を用いるよりも好ましいと思います。
| aCollection aNumber |
aCollection := 1 to: 10.
aNumber := aCollection inject: 0 into: [:first :second | first + second].
Transcript
cr;
show: aNumber printString.
^aNumber
Smalltalk の良さの一つに、プログラム制御構造を自らがデザイン
して、Smalltalk (プログラミング言語)の中に組み込めてしまう
ことがあげられます。
------------------------------------------------------------
R2D2 (AOKI Atsushi) http://www.sra.co.jp/people/aoki/
SML メーリングリストの案内