NetLogo 6.4.0 リストの基本操作
1. はじめに
NetLogo は、エージェントベースのモデリングとシミュレーションに特化したプログラミング言語および開発環境です。このツールは、特に社会科学や生物学の研究者に利用されており、複雑なシステムのシミュレーションを簡単に行うことができます。NetLogo の主な特徴は、複数のエージェントが同時に動作し、それぞれが独自のルールに従って行動することです。これにより、個々のエージェントの相互作用から生じる全体の動作やパターンを観察することが可能です。List は、NetLogo で使用されるデータ構造の一つです。これは、複数の値を一つの変数にまとめて管理するための方法です。リストは、数値や文字列、他のリストなどを要素として持つことができ、データの操作や管理が容易になります。
本記事では、NetLogo の List について、リファレンス形式で記述します。また、以下のコードは NetLogo Ver.6.4.0 で実行テストしたコードです。異なるバージョンでは、正常に動作しない場合があるので、ご注意ください。
2. リストの定義
Int 型、String 型、Boolean 型のリストを定義することが出来ます。
1;; Int 型のリスト2let myListInt [ 1 2 3 4 5 ]3print myListInt ;; [1 2 3 4 5]4
5;; String 型のリスト6let myListStr [ a b c ]7print myListStr ;; [a b c]8
9;; Boolean 型のリスト10let myListBool [ true false true false ]11print myListBool ;; [true false true false]
ネストリストも定義することが出来ます。
1let myNestList [2 [0 1 2]3 [3 4 5]4 [6 7 8]5]6
7print myNestList ;; [[0 1 2] [3 4 5] [6 7 8]]
異なる型のリストは、定義することが出来ません。
1;; Error2let errorList [ 1 2 3 a b c true false true ]3
4;; Error5let errorList [6 [0 1 2]7 [a b c]8 [true false true]9]
3. 要素の追加
1let myList [ 1 2 3 4 5 ]2
3;; リストの最後に要素を追加4set myList lput 6 myList5print myList ;; [1 2 3 4 5 6]6
7;; リストの最初に要素を追加8set myList fput 0 myList9print myList ;; [0 1 2 3 4 5 6]
4. 要素の取得
1let myList [ 1 2 3 4 5 ]2
3;; N 番目の要素を取得4print item 1 myList ;; 25
6;; 最初の要素を取得7print first myList ;; 18
9;; 最後の要素を取得10print last myList ;; 511
12;; インデックス 1 から 3 までの要素を取得13print sublist myList 1 3 ;; [2 3]
5. 要素の変更
1let myList [ 1 2 3 4 5 ]2
3set myList replace-item 2 myList 94
5print myList ;; [1 2 9 4 5]
6. 要素の削除
1let myList [ 1 2 3 4 5 ]2
3;; 最初に見つかった 3 を削除4print remove 3 myList ;; [1 2 4 5]5
6;; 最初の要素を削除7print but-first myList ;; [2 3 4 5]8
9;; 最後の要素を削除10print but-last myList ;; [1 2 3 4]
7. リストの反復処理
1let myList [ 1 2 3 4 5 ]2
3foreach myList print4
5foreach myList [ x -> print x ]6
7;; 各要素を2倍にする8print map [ x -> x * 2 ] myList ;; [2 4 6 8 10]9
10;; 2より大きい要素だけを抽出11print filter [ x -> x > 2 ] myList ;; [3 4 5]12
13;; リストの合計を計算14print reduce [ [x y] -> x + y ] myList ;; 15
8. リストの長さを取得
1let myList [ 1 2 3 4 5 ]2
3print length myList ;; 5
9. リストの結合
1let myList1 [ 0 1 2 ]2let myList2 [ 3 4 5 ]3
4print sentence myList1 myList2 ;; [0 1 2 3 4 5]
10. その他
1let myList [ 3 2 5 1 4 ]2
3;; 最大要素を取得4print max myList ;; 55
6;; 最小要素を取得7print min myList ;; 18
9;; リストをソート10print sort myList ;; [1 2 3 4 5]11
12;; リストを逆転13print reverse myList ;; [4 1 5 2 3]14
15;; リストを逆ソート16print reverse sort myList ;; [5 4 3 2 1]
11. おわりに
ここまで、NetLogo の List について記述してきました。foreach、map、filter、reduce が実装されているので、簡単な関数型プログラミングも出来そうです。更に詳しい情報に関しては公式ドキュメント 1 を参照ください。
-
NetLogo User Manual Programming Guide:https://ccl.northwestern.edu/netlogo/2.0/docs/programming.html#lists ↩