2016-05-03 6 views
3

Ich habe ein Problem zu verstehen, die Rolle von to-report und report in NetLogo, auch scheint es ziemlich nützlich, und ich kann nicht wirklich eine Hilfe in "menschlichen Stil" Sprache geschrieben finden.NetLogo: Die Bedeutung von TO-REPORT für Dummies erklärt?

In NetLogo Dictionnary http://ccl.northwestern.edu/netlogo/docs/dictionary.html#report I Definitionen für to-report finden:

to-report procedure-name 
to-report procedure-name [input1 ...] 
Used to begin a reporter procedure. 

The body of the procedure should use report to report a value for the procedure. See report. 

und für report:

report value 
Immediately exits from the current to-report procedure and reports value as the result of that procedure. report and to-report are always used in conjunction with each other. See to-report for a discussion of how to use them. 

So scheint es, to-report und report einen Wert berechnen und darüber berichten.

Wenn ich also hinzufügen, versuchen

to-report average [a b c] 
    report (a + b + c)/2 
end 

zu meinem Code, und verwenden Sie dann die average Variable irgendwo in meinem Code P.E .:

to go 
    ... 
    print average 
    tick 
end 

ich einen Fehler haben: AVERAGE expected 3 inputs. Wenn ich versuche, meine Variablen [a b c] in globals [a b c] zu erstellen, habe ich einen Fehler There is already a global variable called A. Wenn ich meine Variablen definieren [a b c] innerhalb to-report Prozedur:

to-report average [a b c] 
    set a 1 
    set b 2 
    set c 3 
    report (a + b + c)/2 
end 

Mein Fehler ist wieder AVERAGE expected 3 inputs.

So, Wie kann ich einfach die Nützlichkeit von to-Bericht Verfahren testen? Und wo ich es richtig in meinen Code legen kann, um zu sehen, was es wirklich macht? von Urban Suite - Wirtschafts Disparität (http://ccl.northwestern.edu/netlogo/models/UrbanSuite-EconomicDisparity) Ich sehe, dass zu jedem Patch im Zusammenhang mit-Bericht verwendet wird, um Werte zu berechnen:

to-report patch-utility-for-poor 
    report ((1/(sddist/100 + 0.1))^(1 - poor-price-priority)) * ((1/price)^(1 + poor-price-priority)) 
end 

aber dies berichtete Wert direkt definiert wird nicht als Patch-Variable, die meine Verwirrung zu erhöhen ..

.

enter image description here

Vielen Dank!

Antwort

2

Eine Funktion kann eine Eingabe (normalerweise eine oder mehrere Variablen oder Werte) und eine Ausgabe (normalerweise ein einzelner Wert) zurückgeben. Sie können angeben, dass eine Funktion mithilfe von to-report im Funktionskopf einen Wert zurückgibt und der Bericht den tatsächlichen Wert zurückgibt.

Ihr Fehler ist aufgrund der Tatsache, dass Sie nie

to go 
    ... 
    print average 
    tick 
end 

sollte

to go 
    ... 
    print average 5 2 3 ;;a = 5, b = 2, c =3 
    tick 
end 

Innerhalb Ihre durchschnittliche Funktion sein, sollten Sie nicht Werte eines in Argumenten Ihre durchschnittliche Funktion übergeben neu zuzuweisen, b und c.

Sie sollten den Bericht immer dann verwenden, wenn Sie ein Ergebnis aus einer Funktion zurückgeben möchten.

+0

danke @mattsap scheint es zu funktionieren! – maycca