トップ «前の日記(2011-11-26(Sat)) 最新 次の日記(2011-11-30(Wed))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2011-11-29(Tue) ぼんやり晴れて、さほど寒くない

ちょっぴり

25年前に出たSmalltalkの本(ISBN4-7828-5025-5 C3355) にあった例題を少し変えて試してみた。

st> a := 2.
2
st> power := [a := a * a].
a BlockClosure
st> power value.
4
st> power value.
16
st> a.
16
 
st> a := 3
3
st> 6 timesRepeat: [ power value printNl ].
9
81
6561
43046721
1853020188851841
3433683820292512484657849089281
6

調子に乗って大きな数を指定していると、

"Global garbage collection... done, heap grown"
"Global garbage collection... done"
"Global garbage collection... done, heap grown"
"Global garbage collection... done, heap grown"
"Global garbage collection... done, heap grown"
"Global garbage collection... done, heap grown"
"Global garbage collection... done, heap grown"

たぶん些少な差異

基数 + r + 数値。デフォルトで10進を返す。

st> 16rFF.
255
st> 16rff.
stdin:2: Unexpected EOF while scanning number

squeakではエラーにならなかった。

なんとなく、どこかで見たような

冪乗計算例。

st> -4 to: 4 do: [:x | (2 raisedTo: x) printNl ].
1/16
1/8
1/4
1/2
1
2
4
8
16
-4

ここまでは、別段ということもなかった。

st> 2 raisedTo: 10
1024
st> 2 raisedTo: 20
1048576
st> 2 raisedTo: 30
1073741824
st> 2 raisedTo: 40
1099511627776

補完

Gnu Smalltalk は、シェルの伝統通りに(?)Tab、Squeak はctrl/Command + q だった。

性懲りもなく

前に二回も書いた( 過去1 過去2) 倍増し算。
初期値の処理がうまくできなかったが(汗、まぁいいか。

st> aNum := 1
1
st> tNum := 1
1
st> allNum := [ aNum := aNum * 2]
a BlockClosure
st> totalNum := [ tNum := tNum + (allNum value)]. "丸括弧は省略できない"
a BlockClosure
st> 63 timesRepeat: [ totalNum value printNl].
3
7
15
31
(ry
2305843009213693951
4611686018427387903
9223372036854775807
18446744073709551615

ここに書き付ける間に追試すると、どこかがおかしくなって まともな結果が出なかった。
スクリプトをファイルに落として、確認。

システムブラウザ

上左より、「カテゴリ」「クラス」「メッセージ・カテゴリ」「メソッド」 の順番で表示している、らしい。
残念ながら、これは覚えるしかなさげ。

例えば、"Kernel-Numbers" カテゴリの "Integer" クラスの "arithmetic" メッセージカテゴリに "+" メソッドが存在している。
下段は説明らしいが、なんのことやらさっぱり。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。