[Squeak-ja: 2491] Re: SqueakToys の変数

Kazuhiro ABE abee.abe @ nifty.ne.jp
2005年 6月 30日 (木) 20:24:53 JST


阿部@新百合です。

On Thu, 30 Jun 2005 09:23:44 +0900
suto <suto @ amcac.ac.jp> wrote:
>(1)
>関数に「引数」を設定したとき、その引数を表すタイルを条件分岐のタイル(テスト)の
>条件部分に入れようとしても入ってくれないのですが、
>引数を見て処理を条件分岐させることはできないのでしょうか?

テストに入れられるフレーズ(たとえば[楕円の][x座標]など)をダミーで入れてお
き、引数付スクリプタの引数部分をクリックして取り出せる引数のタイル([数値]
など)を古いテストの上にドラッグして置き換えれば大丈夫です。

とても変ですが今はこうなっています。この操作はオレンジハロのタイルでレシー
バを差し替えるなど、他でも応用が効くので覚えておくと便利です。

>(2)
>また、関数を再帰的に呼び出すとき、
>「現在の引数に1を足した数を引数として再帰呼び出し」のようなことをやりたいのですが、
>「引数に1を足す」方法が分かりません。可能でしょうか?

引数の定数([5]など)の右にある緑の三角をクリックして式を伸ばし、先程と同じ
ように定数を引数タイルで置き換えてやればいけます。

>(3)
>上記の解決策として、「変数」を新たに作成して「引数」を代入し、
>条件分岐などはこの変数を参照することで処理しています。
>しかし、ここで作成された変数はいわゆるグローバル変数(インスタンス変数?)のようで、
>再帰呼び出しを行うと期待した結果を得ることができません。
>(現在は再帰から返ってきたところで引数を再代入することで回避)
>いわゆるローカル変数を使うにはどうすればいいのでしょうか?

入れ物などをつかって、スタックを自分で作って管理するという荒業があります
が、それ自体が目的でない限りお勧めしません。その部分だけSmalltalkで書くこ
とも出来ます。プロジェクト置き場には、ドラゴン曲線など、まだ引数がなかっ
た時代の力作があります。

http://swikis.ddo.jp/abee/14

>(3)に関しては、(2)が解決すれば Lisp でいうところの破壊的代入をしない、
>という作戦でなんとかなりそうと予想しています。

再帰を使ってスパイラルを描くプロジェクト(recursiveSpiral.pr)を作ってみま
したのでご覧ください。

http://swikis.ddo.jp/abee/3#bottom

 //abee
--
阿部 和広  EMAIL abee.abe @ nifty.ne.jp



Squeak-ja メーリングリストの案内