StarLogo テキスト - ne · 2011-02-28 · 2/14...

14
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 手順を何回か繰り返すと、次々に亀が(00)の位置に重なってくることを確認しよう。(亀の 色が変わってくる。亀をマウスで移動させてみよう) 0.05050

Transcript of StarLogo テキスト - ne · 2011-02-28 · 2/14...

Page 1: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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)

Page 2: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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 手続きを呼び出して実行することにしよう。

Page 3: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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?

Page 4: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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 を作成した。

Page 5: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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 に出力させてみる。

Page 6: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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

とすればよい。

Page 7: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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)に住んでいるとされている。

Page 8: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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

Page 9: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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 は各亀の持

亀番号 設定する座標

Page 10: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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 番の亀の実行結果

Page 11: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

11/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc

第2節 広域変数を定義して、値を代入する。 広域変数は、下の図のように変数スライダーで定義して、値を代入することができる。

変数名は。コロンを必要としない。

変数スライダー

練習問題 次のような旗を360度にn個作成せよ。

旗の大きさ 10 ステップ、棒の長さ 15 ステップ

練習問題 円の半径(r)と円の中心(x、y)を与えた時の円を描くプログラムを作成

しなさい。

Page 12: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

12/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc

ファイル名 enn_hannkei_tyuusinn

Page 13: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

13/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc

第6章 テールリカージョン

ら線形を描いてみよう。

rasenn の手順の中で、再び rasenn を呼び出していることに注意しよう。こうした使い方

をテールリカージョンと呼ぶ。再帰的処理を行う場合にしばしば利用される。

Page 14: StarLogo テキスト - ne · 2011-02-28 · 2/14 D:¥data¥研究テーマ¥StarLogo¥StarLogo2¥テキスト¥1匹¥一匹.doc そこで、cg の後ろにct を加えると、一番の亀が何時も出現する。すなわち、cg

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 等