[SML 7593] Re: 第9回Smalltalk勉強会@京都

濱崎治 osamu.hamasaki @ gmail.com
2009年 7月 3日 (金) 23:39:47 JST


濱崎です。

2009/07/02 15:39 AOKI Atsushi <atsushi @ cc.kyoto-su.ac.jp>:

> 青木@京都上賀茂です。

<中略>

>
> 実行算法(アルゴリズム)と実行環境(コンテクスト)の双方を閉
> 包するブロッククロージャは、様々な常識的な定義の再考察を迫っ
> てきます。たとえば、一時変数の説明の言い回しも考え直さねばな
> らんなぁ〜、とね。
>

もうひとつ「一時変数と言って良いのか?」と考えることになる例を書いて
みました。

まずは下準備で、ワークスペースで以下のプログラムを実行して下さい。
3つのワークスペース変数を用意します。

| aWorkbook |
aWorkbook := ScheduledControllers activeController model.
aWorkbook addLocal: #ResetBlock.
aWorkbook addLocal: #IncrementBlock.
aWorkbook addLocal: #DecrementBlock


次に、同じワークスペースで以下のプログラムを実行して下さい。
3つのブロッククロージャを作って先ほど用意したワークスペース変数に
束縛します。

| x |
ResetBlock :=
[x := 0.
Transcript show: x printString].

IncrementBlock :=
[x := x + 1.
Transcript space; show: x printString].

DecrementBlock :=
[x := x - 1.
Transcript space; show: x printString]


次に、また同じワークスペースで以下のプログラムを実行して下さい。
三歩進んで二歩下がる数の列をトランスクリプトに表示するプログラムですが、
一時変数 x に関し、このプログラムで用意した物と、ブロッククロージャの中で
使われている物は、全く縁が切れているのがお分かり頂けると思います。

| x |
Transcript clear.
ResetBlock value.
x := 100.
2 timesRepeat: [
3 timesRepeat: [IncrementBlock value].
2 timesRepeat: [DecrementBlock value]].
Transcript cr; show: x printString.
2 timesRepeat: [
3 timesRepeat: [IncrementBlock value].
2 timesRepeat: [DecrementBlock value]]


最後に、同じワークスペースで以下のプログラムを実行して下さい。
後始末をします。

| aWorkbook anEnvironment |
aWorkbook := ScheduledControllers activeController model.
anEnvironment := aWorkbook doItEnvironment.
#(#ResetBlock #IncrementBlock #DecrementBlock)
do: [:each | anEnvironment removeKey: each].
Transcript clear

以上です。

------------

Osamu Hamasaki
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://www.smalltalk.jp/pipermail/sml/attachments/20090703/8547f33b/attachment.html


SML メーリングリストの案内