リスト処理
Last-modified: 2019-01-27 (日) 03:35:34 (1518d)
StarLogoは基本機能として「リスト構造」を取り扱う機能を備えています。 この機能は単にStarLogoの元になった言語のなごりというわけではなく、 StarLogoシステムが多くのタートルに一度に命令を下したり、全ての パッチに同時にある処理を行うという場合に、その対象のタートルや パッチの「集まり」を表すのに使われているとても重要な機能です。 また、「リスト」というのは、とても柔軟なデータ構造で、多くのデータ構造は ほとんどこのリスト構造を限定して使う事で実現可能だと思います。 リストとは †リスト構造の定義 †リストは次の様に[記号と]記号の間に「リスト要素」と呼ばれる データを並べたものです。 [ リスト要素 リスト要素 リスト要素 ・・・・ ] このリスト要素になれるのは、数値、文字列、記号など、リスト処理の範疇 ではこれ以上分解できない「アトム」と呼ばれるもの*1と、「リスト」そのもの です。 アトムの例 †123や3.1415、Helloや、"Happy New Year" などです。 リストの例 †[1 2 3 4]や、[a b c d]や、[[1 2] [a b] ["Hello" "Logo"]] など です。 リスト処理の基本 †リスト処理の基本はリストの「分解」と「合成」です。 StarLogoではこの「分解」と「合成」のための便利な手続きを用意しています。 リストの分解 †リストの分解のもっとも単純なものは、 リストの「先頭要素」とその先頭要素を取り除いた「残りのリスト」に分ける というものです。 ここで、「先頭要素」は、アトムになるか、リストになるかわかりませんが、残り は、必ずリストになります(空リスト[]も含みます)。 first †StarLogoでリストの先頭を取り出すにはfirstという機能を使います。 first [a b c] ---> a これが利用するには「そのリストが空でない」事が必要です。 また、「残り」の取出しには、butfirstという機能を使います。 butfirst [a b c] ---> [b c] リストの合成 †list †リストを作る、もっとも単純な方法は listという機能を利用する事です。 listは2つの引数を持ち、その2つの引数を要素とするようなリストを作ります。 list 3 4 --> [3 4] fput †first、butfirst、での分解の逆を行う機能がこのfputです。すなわち、 fput "a" [b c d] --> [a b c d] の様に使う事ができます。 実行確認 †ここに示した例は、Control Centerウィンドウ内のObserver Command Center内で、showコマンドを利用する事によって実際に 実行を確認することができます。
Counter: 420,
today: 1,
yesterday: 0
|