2016-04-28 84 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的最後兩個值的列表 - 我怎樣才能使它保存和打印x和y的值都必須在循環中?

,我真的很抱歉再次

回答

1

如果您只是想計算fib序列並獲取列表中的數字,您可能需要考慮這一點。我想指出,你的xs列表和ys列表是fib序列的子集。它是Alan提到的遞歸案例的一種替代方案,它比重複聲明更簡潔一點:

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 

,它可能是有趣的,使用一個小的遞歸:

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

' (''cf' extension](https://github.com/qiemem/ControlFlowExtension#cf-extension)(現在與NetLogo 5.3.1捆綁在一起)...... :-) –