僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
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や内容が変った場合はあしからず。