2016-04-28 8 views
2

これは愚かな質問であれば本当に申し訳ありませんが、私はnetlogoに非常に新しく、提案されています。質問は次のとおりです。netlogoのリピートループから変数のすべての値を出力する

netlogoのリピートループの変数の値をすべて保存して印刷するにはどうすればよいですか?

let x 1 
    let y 1 


let i n - 2 

    repeat i [let z (x + y) set x y set y z ] 

    let list1 (list x y) 

print list1` 

このコードは現在、xとyの最後の2つの値を含むリストを作成し、印刷している - どのように私はそれがXとYは、ループ内で持っていたすべての値を保存し、印刷することができますか?

私は再び

答えて

1

フィブリシーケンスを計算してリスト内の数値を取得する場合は、これを考慮する必要があります。私は、YSのXSとリストのリストは、アランが言及した再帰的な場合の代替手段だと、それは繰り返しの文よりも少しきれいだsequence.It FIBのサブセットであることに注意したいと思います:

to-report fib [n] 
    if n < 2 [ report n-values (n + 1) [?]] ;; consider base case 
    report reduce [sentence ?1 ((last ?1) + (last (but-last ?1))) ] (fput (list 0 1) (n-values (n - 1) [?])) 
end 
+0

1。 'ifelse-value'は切り捨てることができます。 2.これは、tが実際には減少していないことを明確にします。 – Alan

+0

よろしくお願いします。ありがとう! = D – mattsap

3
to test-fib [#n] 
    let x 1 
    let y 1 
    let xs (list x) 
    let ys (list y) 
    let i (#n - 2) 
    repeat i [ 
    let z (x + y) 
    set x y 
    set y z 
    set xs lput x xs 
    set ys lput y ys 
    ]  
    print xs 
    print ys 
end 

本当に申し訳ありません。しかし、レポーターを使用することが好ましいです。

to-report better-fib [#n] 
    let x_2 0 
    let x_1 1 
    let fibs (list x_2 x_1) 
    repeat (#n - 2) [ 
    let x (x_2 + x_1) 
    set fibs (lput x fibs) 
    set x_2 x_1 
    set x_1 x 
    ] 
    report fibs 
end 

そして、少し再帰を使用するのも楽しいかもしれません:あなたは、少なくとも2つの項目がしたいと仮定すると、

to-report fun-fib [#n] 
    if (#n = 0) [report []] 
    if (#n = 1) [report [0]] 
    if (#n = 2) [report [0 1]] 
    let f1 (fun-fib (#n - 1)) 
    let x_1 last f1 
    let x_2 last butlast f1 
    report lput (x_2 + x_1) f1 
end 

あなたがそれらをしたくない場合は、常に最初のアイテムをドロップすることができます。

+0

' fun-fib'は[cf拡張子](https://github.com/qiemem/ControlFlowExtension#cf-extension)(これは現在NetLogo 5.3.1にバンドルされています)でうまく見えます: –

関連する問題