我有一个问题需要理解to-report
和report
在NetLogo中的作用,即使它看起来非常有用,我也找不到用“人类风格”语言编写的帮助。
在NetLogo dictionnary http://ccl.northwestern.edu/netlogo/docs/dictionary.html#report中,我可以找到to-report
的定义:
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.
和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.
因此,似乎to-report
和report
计算了一些值并报告了它。
因此,当我尝试添加
时to-report average [a b c]
report (a + b + c) / 2
end
到我的代码,然后在我的代码中的某处使用average
变量:
to go
...
print average
tick
end
我收到了错误:AVERAGE expected 3 inputs
。当我尝试在globals [a b c]
中创建变量[a b c]时,我收到了错误There is already a global variable called A
。
如果我在[a b c]
过程中定义变量to-report
:
to-report average [a b c]
set a 1
set b 2
set c 3
report (a + b + c) / 2
end
我的错误又是AVERAGE expected 3 inputs
。
因此,如何简单地测试报告程序的有用性?在哪里正确地将它放在我的代码中以查看它实际上在做什么?从Urban Suite - 经济差异(http://ccl.northwestern.edu/netlogo/models/UrbanSuite-EconomicDisparity)我看到to-report用于计算与每个补丁相关的值:
to-report patch-utility-for-poor
report ( ( 1 / (sddist / 100 + 0.1) ) ^ ( 1 - poor-price-priority ) ) * ( ( 1 / price ) ^ ( 1 + poor-price-priority ) )
end
然而,这个报告的值并没有直接定义为补丁变量,这增加了我的困惑......
谢谢!
答案 0 :(得分:2)
函数可以接受一些输入(通常是一个或多个变量或值)并返回一些输出(通常是单个值)。您可以指定函数在函数头中使用to-report返回值,并返回实际值。
您的错误是由于您从未将参数传递给平均函数
to go
...
print average
tick
end
应该是
to go
...
print average 5 2 3 ;;a = 5, b = 2, c =3
tick
end
在平均功能中,您不应重新分配a,b和c的值。
只要您想从函数返回结果,就应该使用报告。