Missing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate TagMissing Alternate Tag

2005/4-2007/12まで

p.348の図9.1で、適当な時点を選ぶとエラーが発生して停止し図9.2のリストが得られません。エラーを解除して先に進む方法を教えてください。


エラー解除の件有難うございました。実験科学教育用のわかりやすい指導書をつくる立場から、C/C++の相乗効果が期待できるsqueakに注目しています。Windows XP(Home ed.)環境下での質問です。P.380-381のpreambleファイルとpostscriptファイルの作り方及びそれらをinstallディレクトリに置く方法が見つかりません。添付のMole Attack.sarのように、zipを開いたとき、install/,install/preamble,install/postscriptのように表示できません。ご教示をお願いします。



p.85 repeat の例でさいころの目のプログラムが載っていますが, [ ... ] repeat. の外側で,リターンされた count の値を Transcript show: で表示させることはできないのでしょうか? (F.Saito)
自己解決しましたので,上記質問の撤回をお願いいたします。↑count が [ ... ] repeat. の外側に脱出する,C 言語などの break のような働きをするのかと勘違いしていました。文字どおり return の動作をするようですね。失礼しました。 (F.Saito)


稚拙な書き込みにコメントして頂きまして恐縮です。一応12章のあたりまで読み進みましたが,理解不足なので最初にもどって読み直ししています。一度目の時はプログラム例を打ち込んで実行してみるだけで精一杯だったのですが,二度目だと自分なりに変更を加えたりできるようになりました。いつかちゃんとしたプログラムが作れたらいいのですが。 (F.Saito)


『自由自在 Squeakプログラミング』を、実際にコードを書いて動かしながら、読み進んでおります。使っているSqueakは、Windows版 ver 3.8 です。
p173 の「5.1.3 ブロック内リターン」でつまずいています。
載っているとおりにコードを書いて doit すると、デバッガが起動されてしまいます。問題を単純化するために、下記のようなコードを書いてみました。

myblock := [ |sum|
sum := 0.
^sum.
].
myblock value

やはりデバッガが起動されます。デバッガのタイトルには、
BlockCannotReturn
と表示されています。何が悪いのか、自分にはよくわかりません。

よろしくお願いします。(TS)


umejavaさん、お返事(ご回答)ありがとうございます。
... おそらく、ご指摘のとおりだと思います。
↑このようにやや歯切れの悪い返事になりました理由は、下記のとおりです。

デバッガが起動することなく、期待通りに動作します。
順に doit すると、2度目の myblock value に対する doit で
デバッガが起動してしまいます。

このような現象になってしまう理由/原因をお教えいただければ幸いです。
よろしくお願いします。(TS)



umejavaさん、丁寧な解説を本当にありがとうございます。
だいたい(半分くらいは)理解できました。
それにしても、流石、深い深いところまでご存知なのですね。すごいなぁ。
念のため、ブロックの挙動に対する自分の認識が正しいか否か確認するため、
下記のコードをまとめて do it してみました。

myBlock _ [ Transcript cr; show: 'hello' ].
myBlock value.
myBlock value.

... ちゃんと2回評価されて、2行の hello が表示されますね。
そして、以下のコードをまとめて do it すると、

nestedBlock _ [ |sum|
Transcript cr; show: '### START ###'.
sum _ 0.
10000 timesRepeat: [
sum _ sum + 1.
sum > 100 ifTrue: [ ^sum ].
Transcript space; show: sum.
].
Transcript cr; show: '### END ###'.
].
nestedBlock value.
nestedBlock value.

... 2度目の value 送信では、何も起きません。
これが、umejavaさんがおっしゃっている「抜け殻状態のブロック」って
ことなんですね。
ブロックを書く場合に、きをつけておかないといけませんね。
ありがとうございました。m(_ _)m

BlockTester >> test1
[^1] fork.
^2

P.42 に、Pen example の実行結果が図 1.17 として載っています。do it してみると、Workspace のエリアには描画されない、或は Workspace で上書きされてしまうようです。図のように完全な図形を表示する方法があるのでしょうか? (F.Saito)
(Alt+d)でできました。いつもつまらない質問にお答えいただきまして、ありがとうございます。(F.Saito)
Debian GNU/Linux 4.0 Etch に Sqeqk をインストールしてみましたが,save as で名前を入力中に以下のようなメッセージとともに終了してしまいます.

Segmentation fault

2027132628 ProcessorScheduler class>idleProcess
2026612936 [] in ProcessorScheduler class>startUp
2026613028 [] in BlockContext>newProcess
アボートしました

以上,一応ご報告します.Debian 自体の問題かとも思えるし,ご意見箱の趣旨にそわない内容かもしれないのでこの書き込みは削除していただいてもかまいません.(F.Saito)
初歩的な質問で恐縮ですが、「P.192」で、オブジェクト「myDictionary」にyourselfメソッドを送信しない場合と送信した場合のふるまいの違いが理解できません。yourselfメソッドを送信した場合、atメソッドをつないだ結果が有効となるのでしょうか。(Takagi)
Counter>> increment
 ^count := count + 1
myCounter := Counter new increment; increment; increment.
myCounter := Counter new increment; increment; increment; yourself.
at: key put: anObject 
(略)
^anObject

-----------

Link to this Page