LOGO言語は約50年前の教育用プログラム言語ですが、これが発展したNetLogoがシミュレーション等でよく使われているようです。最近、教育用プログラミング環境について調査をしている過程で知りました。
つい最近もアップデートされているようで、モデルライブラリが豊富で、かなり実用的と感じました。ちょっとはまりそうです。
ユーザマニュアルにあるチュートリアルを参考に、内容を理解するために、できるだけシンプルにして動かしてみました。
setupとgoはボタンイベントで起動します。(toはプロシージャ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
turtles-own [energy] to setup clear-all setup-patches setup-turtles reset-ticks end to setup-patches ask patches [ set pcolor green ] end to setup-turtles create-turtles 10 ask turtles [ setxy random-xcor random-ycor ] end to go if ticks >= 140 [ stop ] move-turtles eat-grass reproduce check-death regrow-grass tick go end to move-turtles ask turtles [ right random 360 forward 1 set energy energy - 1 ] end to eat-grass ask turtles [ if pcolor = green [ set pcolor black set energy energy + 8 ] ] end to reproduce ask turtles [ if energy > 50 [ set energy energy - 50 hatch 1 [ set energy 50 ] ] ] end to check-death ask turtles [ if energy <= 0 [ die ] ] end to regrow-grass ask patches [ if random 100 < 3 [ set pcolor green ] ] end |
タートルが草を食べて増殖していく様子をシミュレーションしています。
草は食べられればなくなりますが、また生えてきます。
タートルは草を食べれば、エネルギーが増えますが、移動することでエネルギーを消費します。
エネルギーがなくなれば死にます。
どれが予約語でどれが定義なのかわかりにくいですが、言葉の意味を追っていけば理解できます。
ギリシャ語のLogos(言葉)を由来にしており、他の言語が数値を処理することに対して言葉を処理することを強調している(ウィキペデアより)からでしょうか。
重要なキーワードを以下に挙げておきます。
hatch: 生成
die: 死
energy: エネルギー
turtle: タートル(移動する実体。よく使われますね)
patch: ここでは草を表現(緑で生成、黒で食べられた後を意味する:pcolor)
ask: 処理対象を表現(for-eachっぽい)
tick: 処理単位(1tick進む)
結果は、タートルの増殖が草がなくなってくると抑制されていることがよくわかります。
最近、プログラミング教育について掘り下げて考えていくと、昔のコンピュータ言語、コンピュータサイエンスの勉強に行き着くことがよくあります。(LISP, BASICなど。また今はやりのDeepLearningもそうです。)
NetLogoもまさにこれです。最新テクノロジーだけでなく、膨大な過去の資産からももっと学びたいと思っています。
参考: https://ccl.northwestern.edu/netlogo/index.shtml