向记者提供论据

Tho*_*s K 4 netlogo

以下可能是 Netlogo 的基本编程问题。我想写一篇通用的记者,我可以为他们应该报道的内容提供论据。假设有以下程序:

turtles-own [
  houses
  cars
]

to setup
  clear-all
  create-turtles 10
  reset-ticks
end

to go
  ask turtles [
    set houses houses + random 2
    set cars cars + random 5
  ]
  
  tick
end
Run Code Online (Sandbox Code Playgroud)

我可以写一篇关于房屋平均数的记者:

to-report mean-houses
  report mean [ houses ] of turtles
end
Run Code Online (Sandbox Code Playgroud)

但我想要一个通用的报告器,我也可以用它来报告汽车的平均值,如下所示:

to-report means [ param ]
  report mean [ param ] of turtles
end
Run Code Online (Sandbox Code Playgroud)

然而,这并没有按预期工作:

setup
repeat 15 [go]
show means houses

> ERROR: You can't use HOUSES in an observer context, because HOUSES is turtle-only.*
Run Code Online (Sandbox Code Playgroud)

param在这种情况下,如何让 Netlogo 在海龟的背景下进行评估?我熟悉如何在 R 中执行此操作(例如,通过tidy evaluation屏蔽{{ x }},或早期的引用机制),但不熟悉如何将其转换为 Netlogo。

Lei*_*rsW 6

正如错误所述,您试图将仅包含海龟的变量(房屋)传递给在观察者上下文中使用的过程,但这不起作用,因为 Netlogo 会在实际运行过程之前尝试将变量传递给过程。

相反,您可以使用以下代码。在此示例中,您首先使用“of”基元将房屋/汽车变量提取为列表。只有这样你才能将它们传递给“手段”程序,该程序由观察者运行。

to-report means [ param ]
  report mean param 
end
Run Code Online (Sandbox Code Playgroud)
show means [houses] of turtles
show means [cars] of turtles
Run Code Online (Sandbox Code Playgroud)