2016-04-28 10 views
2

Es tut mir wirklich leid, wenn dies eine dumme Frage ist, aber ich bin sehr neu zu Netlogo und Vorschläge, die ich anderswo finde nicht für meinen Fall anwendbar; Die Frage ist:Drucken aller Werte einer Variablen aus einer Wiederholungsschleife in Netlogo

Wie speichere und drucke ich alle Werte einer Variablen aus einer Wiederholungsschleife in 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` 

wird dieser Code jetzt machen und Drucken einer Liste, die nur die letzten beiden Werte von x und y enthält - wie kann ich es machen alle Werte zu speichern und zu drucken, die innerhalb der Schleife x und y hatte?

Ich bin wirklich wieder leid

Antwort

1

Wenn Sie nur die fib-Sequenz berechnen und die Zahlen in einer Liste abrufen möchten, sollten Sie dies berücksichtigen. Ich möchte beachten, dass die Liste der xs und die Liste der ys Teilmengen der fib sequence.It sind eine Alternative zu den rekursiven Fall von Alan erwähnt und es ist ein bisschen mehr sauberer als die repeat-Anweisung:

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. Der 'iffelse-Wert' kann geschnitten werden, 2. Das macht deutlich, dass es sich wirklich nicht um eine Reduktion handelt. – Alan

+0

Guter Anruf. Vielen Dank! = 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 

Aber es wäre besser, einen Reporter zu verwenden. Vorausgesetzt, dass Sie mindestens zwei Einzelteile wünschen:

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 

Und es könnte Spaß machen, ein wenig Rekursion zu verwenden:

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 

Sie können jederzeit die ersten Elemente fallen, wenn Sie sie nicht wollen.

+0

' Fun-fib' würde mit der ['cf' Erweiterung] (https://github.com/qiemem/ControlFlowExtension#cf-extension) (jetzt im Lieferumfang von NetLogo 5.3.1 enthalten) gut aussehen ... :-) –