エレファント・ビジュアライザー調査記録

ビジュアルプログラミングで数式の変形を表すことを考えていくブロクです。

クロージャーの調査(3)

プログラム電卓(Blockly)へのクロージャーの導入(2)

前回説明した言語を改造してBlocklyを使ったクロージャー調査用の言語を作成します。

数値と真理値の計算

Blocklyで定義されているものを使います。

変数の定義と代入

変数の作成はBlocklyで定義されているものを使います。

Blocklyの既定のJavaScriptのコードでは変数がどこで定義されたかを書くことはできないようなので、変数を定義するブロックを作成します。

変数 [変数] を [値] と定義
[ステートメントブロック]

は、この場所で値が [値] である変数を定義します。その下にステートメントを接続していくことができます。この接続されたステートメントの全体をステートメントブロックとし、ステートメントブロックでこの変数が使われているときはその値としてステートメントブロックを実行したときの値が、値となります。

変数 [変数] に [値] を代入
[ステートメントブロック]

は、この場所で変数に値を代入します。ここで変数を定義しないこと以外は変数の定義と同様です。これはBlocklyの既定のものと同様です。ステートメントブロックの処理も上記のものと同様です。

複数の変数 [変数リスト] を [値リスト] と定義
[ステートメントブロック]

は、この場所で複数の変数を定義します。[変数リスト] で複数の変数を指定します。[値リスト] が値となります。ステートメントブロックの処理は上記のものと同様です。

複数の変数 [変数リスト] に [値リスト] を代入
[ステートメントブロック]

は、この場所で複数の変数に値を代入します。[変数リスト] で複数の変数を指定します。[値リスト] が値となります。ステートメントブロックの処理は上記のものと同様です。

リストの作成

空のリストを作成するか、要素を指定してリストを作成することができます。これらはBlocklyで定義されているものを使います。

関数の定義と実行
関数の定義 [関数名] 引数 [変数] [ステートメントブロック(関数定義)]
[ステートメントブロック]

は、この場所で関数を定義します。[関数名] は関数の名前で、変数として定義します。[変数] は引数となる変数名で、これも変数として定義します。このブロックの内部に [ステートメントブロック(関数定義)] を記述します。この内部ではこれより上で定義された変数を使うことができます。[変数] で指定した変数が [ステートメントブロック(関数定義)] で使われているとき、関数の実行のときは指定した値で置き換えられます。[関数名] で指定した変数が下の [ステートメントブロック] で「関数の実行」で使われると、関数定義の内容で置き換えられます。

関数の実行 [関数名] 引数 [値]

は関数を実行します。関数が定義されたときの引数にこの引数が割り当てられて実行されます。

複数の引数を指定するときは、リストにする必要があります。

Blocklyで定義されている関数の定義では、引数を複数書けるようになっています。これを作るには「ミューテーター」(ブロックの形を変えるダイアログのようなもの)というものを作る必要があるようですが、そのやり方が書いてあるところが不明なので現在は作ることができません。Blocklyで定義されている関数の定義では、関数を定義する場所を指定することができないようなので、これを直接使うことはできないようです。

条件により処理を分ける
もし [値] 実行 [ステートメントブロック(真)] そうでなければ実行 [ステートメントブロック(偽)]
[ステートメントブロック]

は [値] が真であれば [ステートメントブロック(真)] を実行し、[値] が偽であれば [ステートメントブロック(偽)] を実行します。真の場合と偽の場合の間に「そうでなくもし [値] 実行 [ステートメントブロック]」を複数追加することができます。最初の [値] が真であるものが実行されます。これはBlocklyで定義されているものです。

下に [ステートメントブロック] を接続したときは、変数の場合と同様です。

タートルグラフィックス

タートルグラフィックスで図形を描くことができます。ただしタートルを表示する機能はありません。LOGOやScratchでタートルグラフィックスが使えるため、プログラミング言語(Blockly)のタートルグラフィックスの機能は残しています。

下に [ステートメントブロック] を接続すると、上から順に実行されます。