Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
1/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
StarLogo テキスト (1匹1匹の亀を動かし、logo の基本命令を理解する)
第2章 一匹の亀を動かそう!
ステップ 1 新しいプロジェクトを立ち上げ、亀を一匹出現させる。軌跡を取りながら
移動させる。
<操作>
Observer Control Center(OCC)
① ct と入力(タートルを消す)
② crt 1 と入力
Turtle Command Center(TCC)
① fd 20
② bk 20 後ろに進む
③ pd ペンを下ろす
④ fd 50 スクリーンの大きさ確認
⑤ fd 20
⑥ fd 30
⑦ rt 90
⑧ fd 50
ステップ2 手順を作ろう。
① Observer Procedure で、図 1 のプログラムを打ち込んでみる。
② Observer Command Center
で startと入力して enterキー
を押そう。
どのようなことが起こっただろうか? To から
end の間に記述された一連の命令が実行されたこと
を確認しよう。これを手続きという。
この手続きを作成したことは、新しい言葉を観察者
が使える命令リストの一つとして加えたことになる。
この start 手順を何回か繰り返すと、次々に亀が(0、
0)の位置に重なってくることを確認しよう。(亀の
色が変わってくる。亀をマウスで移動させてみよう)
(0.0)
(50、50)
2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg はグラ
フィック画面のパッチを黒色に変えることによって画面を初期状態に戻すが、亀はそのま
ま残る。
crt 1 は、今画面にある亀の次の番号の亀を生み出すことが確認される。
ステップ 3 三角形を定義する手続き sankaku を定義しよう。
<操作>
① Turtle Procedure へ移動して、手順を作成する。下の図の中のプログラムを
参考にしよう。
② Turtle Command Center で確認する。
<新しい命令の解説>
repeat 回数 [ 命令群 ]
:[ ]で囲まれた命令群を指定された回数繰り返す。
ステップ 4 手続きの相互呼び出し
さて、今このプロジェクトには observer で実行できる start 手続きと turtle で実行でき
る sankaku 手続きが定義されている。この2つの手続きを一つにするために、start 手続か
ら sankaku 手続きを呼び出して実行することにしよう。
3/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
呼び出す手続き(observer 側) 呼び出される手続き(Turtle 側)
to start to sankaku
cg pd
ct repeat 3 [fd 30 rt 120]
crt 1 end
ask-turtles [sankaku]
end
このように、1度手続きとして定義された仕事は、他の手続きによって呼び出され利用す
ることができる。ただし、定義された手続きの実行されるオブジェクトに注意することが
必要である。異なるオブジェクトで実行される手続きを実行させるときは、
ask-turtles ilist [Observer]
観察者が全ての亀に対して ilist の内容の実行を依頼する。観察者は、全ての亀の実行が
終了するまで、自分の仕事は実行しない。
ask-turtle number ilist [Observer]
観察者が ID 番号の亀に対して ilist の内容の実行を依頼する。観察者は、その亀の実行が
終了するまで、自分の仕事は実行しない。
を利用する。
逆に、亀が観察者に仕事を依頼することはない。
練習問題 繰り返し命令を使って、四角形(prg_sikaku)を描く。三角形
(prg_sannkaku)、六角形(prg_rokkakukei)を描いてみよう。
練習問題 繰り返し命令を使って、円(prog_enn)を描いてみよう。
第3章 変数について(StarLogo¥Documentation¥variables.html)
第1節 状態変数(State variables)
状態変数が亀やパッチの特性を作り出す。
亀は7つの状態変数を有している。
xcor
ycor
color
heading
breed
shown?
4/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
pendown?
パッチは、3つの状態変数を有している。
xcor
ycor
patch-color(pc)
観察者は状態変数を持たない。
状態変数を利用するときは、表現としてその変数名を使う。例えば
xcor + 5 (xcor に5を足す)
heading - 90 (headind の値から 90 を引く)
if pendown? [fd 1] (もしペンが下りていれば、前へ 1 ステップ進む)
パッチの xcor と ycor を除いて全ての変数が set 命令を使って値を変えることができる。例
えば、
setcolor red (color 変数の値を red を代入する)
setpc pc + 1 (pc 変数の値を pc に 1 を加えた値を代入する)
注意することは、set 命令は同じ機能を果たす、すなわち変数が空白で区切られていようが
いまいが。
第2節 新しい変数を定義する
新しい状態変数を亀、パッチそして観察者につくることができる。新しい変数を作るとき
は必ず、StarLogo は自動的に変数の利用を促進する新しい手順の集まり(集合体)をつく
る。例えば、亀に age という新たな変数を作ったとすると、そのとき亀達は変数の値を変
える setage という手続きを利用することができる、そしてその変数の値を取得する(参照
する)ときには age という手続きを利用できる。
新しい変数を亀、パッチそして広域として作るときには、turtles-own,patches-own そし
て globals を使う。これらの命令を使うときは、それぞれ Turtle window か observer
Window に書きこむ。しかし、両方に書きこんではいけない。
このようにする
turtles-own [age speed]
亀変数 age と speed を作った。
patches-own [food]
パッチ変数 food を作成した。
globals [clock]
広域変数 clock を作成した。
5/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
亀の変数として、例の age が利用される。パッチ変数として、例の food が利用される。
あおして広域変数として、例の time が利用される。以下に示す命令を利用するためには、
前もって必要とする変数を作成しておかなければならない。
実習 turtles や patches、そしてglobals変数として本文のように定義して見よう。そし
て、
1) 変数を定義してみる.
2) 変数が設定されたか確認してみよう
3) 変数の値を設定してみる
4) 変数の値を表示してみよう
1)
Observer Procedure で以下の命令を、一番先頭に入力しておく。これを働かせるために
は、一度 StarLogoが命令をコンパイルする必要があるので、何でもよいが、例えば、turtle
procedure で fd 10 とでも実行させよう。これによって、変数を設定する命令が解釈実行
され設定されるはずである。
turtles-own[age speed]
patches-own[food]
globals [clock]
2)実行され、変数名が定義されたか確認してみる
(1) 簡単な方法は、turtle や patch をダブルクリックして見よう。
(2) output window に出力させてみる。
6/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
命令入力
出力結果
3)変数を設定してみる
(1)turtle に変数値を設定するのは。Turtle command center 行うときは
setage 50
setspeed 100
obser command center からならば
ask-turtke 75 [setage 50 setspeed 100]
(2) patche の座標が(-36 7)であるものを指定しているので
obser command center から
ask-patch-at –36 7 [setfood 200]
(3) global 変数に対しては
obser command center から
setclock 10
とすればよい。
7/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
内部変数をObsever Command Center から設定している場合を示している。他か
らも設定することができる。当然、プログラムの中から設定することができる。
3)1)の要領で変更された内部変数を確認してみよう。
第3節 変数の接尾辞
あなたが他の亀やパッチの状態変数を参照したり値を代入したりする場合には、-at , -to ,
あるいは -towards 接尾辞を利用する。
例えば、
seth towards xcor-of 23 ycor-of 23
この命令は、caller の向きを 亀 23 番の方向へ向ける。
set heading-at 2 3 90
この命令は、caller から x方向へ+2、y方向へ+3 だけ離れた全ての亀の向きを 90 にする。
(?????)
set pc-towards 270 4 green
この命令は、Celler(各亀)から現在の向きから270度、そして4ステップ離れたパッチ
のパッチカラーを green にする。(????)
-of はエージェントとしての亀の番号を取る
-at はそのエージェントとしてdxそしてdyを取り、それは Caller の相対位置である。
観察者は patch(0、0)に住んでいるとされている。
8/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
-towards は角度とステップの大きさをとる。角度は Caller の向きの相対的な値である。
状態変数への操作
(値の代入) (値の参照)
set age-of
setage age-at
setage-at age-towards
setage-of
setage-towards
第4節 局所変数
グローバル変数と似て、局所変数はいかなる特定の亀やパッチと連合することはない。し
かし、変数を定義した手順の中だけに存在する。
例えば、
to check
let [:num who + color]
if :num > who * 2 [setc red]
end
あるいは
to chck
let [:num who + color]
ifelse :num > who * 2
[setc red]
[set :num who * color
if :num > who * 2[setc red]]
end
第5節 パラメータ
パラメータは局所変数に似ている。すなはち、連合する手続きが存在している間のみ存
在している。パラメータには呼び出す側が値を与える。1つ以上のパラメータを手続きへ
渡すことができる、その場合は変数名を空白で区切る。
例えば
to move :number
fd :number
9/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
lt random 360
bk :number
rt random 360
end
to go
move 30
end
第4章 出力方法
出力命令早見表 出力先 Command Center Output Windows 有る
Show (Observer turtle)
Print (observer) Carriage return 無し
Type (Observer
Turtle)
出力命令の動きを確認しよう。
(1)亀を2匹出して、以下の座標に移動させよう。
1匹目------->(20、0)へ setxy-of 0 20 0
2匹目------->(0、10)へ setxy-of 1 0 10
(2)亀の状態変数(x 座標)を表示しよう。
① 0番の亀の x 座標は? Output Window
(Observer)で print xcor-o f 0 2 0
(Turtle)で print xcor-of 0 turtle #0 20
turtle #1 20
と複数の各亀から同じ報告を出力する。
各亀に対する出力命令である。
② 全亀の x 座標は?
(Observer)で print xcor は実行できない。なんとなれば、xcor は各亀の持
亀番号 設定する座標
10/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
つ状態変数である。Observer は xcor の状態変数を待っていない。
Output Window
(Turtle)で print xcor turtle #0 20
turtle #1 0
各亀の自分の xcor を出力する。
第5章 入力方法
第1節 プログラムの中で変数(局所変数)を定義し、値を代入する。
(1) let [:n 6]
変数名には先頭にコロン(:)が必要となる
例 n角形で一変が Lステップのn_kakukei_let を定義する。:Nと:Lを変数として値を
変えるとさまざまなn角形が描ける。
(Observer) (Turtle)
to start to n_kakukei
cg pd
ct let [:n 12 :l 5]
crt 1 repeat :n[fd :l rt 360 / :n]
ask-turtles[n_kakukei] end
end
(2) パラメータとして渡す。
変数名には先頭にコロン(:)を必要とする。
例 n角形で一変が Lステップのn_kakukei_para を定義する。:Nと:Lを変数として値
を変えるとさまざまなn角形が描ける。
(Observer) (Turtle)
to start to n_kakukei :n :l
cg pd
ct repeat :n[fd :l rt 360 / :n]
crt 1 end
ask-turtles[n_kakukei 9 10]
end
0番の亀の実行結果
1 番の亀の実行結果
11/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
第2節 広域変数を定義して、値を代入する。 広域変数は、下の図のように変数スライダーで定義して、値を代入することができる。
変数名は。コロンを必要としない。
変数スライダー
練習問題 次のような旗を360度にn個作成せよ。
旗の大きさ 10 ステップ、棒の長さ 15 ステップ
練習問題 円の半径(r)と円の中心(x、y)を与えた時の円を描くプログラムを作成
しなさい。
12/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
ファイル名 enn_hannkei_tyuusinn
13/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
第6章 テールリカージョン
ら線形を描いてみよう。
rasenn の手順の中で、再び rasenn を呼び出していることに注意しよう。こうした使い方
をテールリカージョンと呼ぶ。再帰的処理を行う場合にしばしば利用される。
14/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc
変数のまとめ
変数の構造
設定 turtle-own [age speed]
状態変数 値の代入 setage number
値の参照 age age-of age-at age-towards 等
局所変数の設定 let [:n 6]
値の代入 let [:n 6]
値の参照 :n
変数 局所変数 パラメータの設定 そのまま:n
to sikaku :n
repeat :n
end
値の代入 引数として渡す
sikaku 6
値の参照 :n
変数の設定 globals [ n m]
変数スライダー内で設定
広域変数 値の代入 変数スライダーの目盛り
値の参照 そのまま変数名利用(セミコロン必要ない)
M 等