• abee2: ユーザーが定義したブロックに引数はありますが、返り値はありません(それなので、関数ではなくプロシージャ)。組込関数(両端の丸いレポーターブロック、尖ったブーリアンブロック)は返り値を持ちます。

    • 変数を「このスプライトのみ」(インスタンス変数)にすれば、むやみにスコープが広がることをある程度は防げます。どうしても許せないようなら、許せない人たちが作ったSnap!などを使うのも一つの手です。 https://snap.berkeley.edu

    • 「このスプライトのみ」の名前空間はそのスプライトなので、その中で同時に呼ぶと名前の衝突が起こります。これを回避する、つまり、リエントラントにするにはリストで管理するか、定義したブロックを呼び出す度にクローンを作る方法があります。「このスプライトのみ」はクローン毎にユニークです。

  • abee2: Scratchでは関数を定義できないので(ブロック定義で作れるのは返り値を持たないプロシージャ)、再帰ひとつ書くにしてもスタックを自分で管理しないといけません。ブロックは第一級オブジェクトではなく、λ式も作れません。

    • その目的であれば、Scratch派生で、Schemeと同等の記述力を持つSnap!をお勧めします。 Snap! Build Your Own Blocks https://snap.berkeley.edu