netlogo - 如何在 netlogo 6.1.1 中重写此代码?我想我错过了某个地方
问题描述
我已经编辑了我的问题,我试图在 netlogo 6.1.1 中重写这一行,这意味着询问当前的海龟。
注意:s0 是海龟 ID [who] 的列表,例如:s0 [15 14 39 5]
to do
set c0 []
ask turtles with [breed = objets] [set c0 lput who c0]
set d0 []
while [not empty? c0 ][
set s0 []
print s0
ask turtle one-of c0 [set s0 lput who s0 ]
let i 0 let u 1
while [i != u][
set i length s0
foreach s0 [ask turtle ? [ask neighbors [ask objets-here [set s0 lput who s0 ]]]]
set s0 remove-duplicates s0
set u length s0
]
end
因为我没有理解“?” 替换海龟的标识符,所以我在查阅 NetLogo 字典后尝试了这个,然后我按照@Luke C 告诉我的那样尝试,我是这样写的:
foreach s0 [ current-turtle -> ask current-turtle [ask neighbors [ask objets-here [set s0 lput who s0 ]]]]
但是这次我遇到了一个运行时错误:
ASK 期望输入是代理或代理集,但得到的数字是 242。
你能解释一下为什么吗?
我想我没写对,你能帮忙吗?谢谢你
解决方案
看起来你在正确的轨道上。到 6.XX 的转换基本上将 替换?
为用户定义的临时变量,这使得代码更易于阅读。因此,您可以在代码块your-variable-name ->
的开头添加一点,foreach
然后在该块的其余部分使用该命名变量。举一个非常简单的例子:
globals [ s0 ]
to setup
ca
crt 10
set s0 sort n-of 5 turtles
reset-ticks
end
to go
foreach s0 [ current-turtle ->
ask current-turtle [
fd 2
]
]
tick
end
编辑:
修改了海龟的示例代码who
:
globals [ s0 ]
to setup
ca
crt 40
set s0 [15 14 39 5]
reset-ticks
end
to go
foreach s0 [ current-who ->
ask turtle current-who [
fd 2
]
]
tick
end
我应该注意,通常使用who
数字可能不是解决此问题的最佳方法,而不是简单地询问代理集的子集,但上面允许您使用ask turtle NUMBER
.
推荐阅读
- asp.net-core - 无法针对 asp.net core mvc 中的不同区域
- kubernetes - kubectl - 如何通过命令行将服务规范类型编辑为 LoadBalancer?
- matlab - 类别标签不适合 Matlab GUI
- spring-integration - 带有“订阅共享”选项的“int-jms:消息驱动通道适配器”的 Spring Integration DSL 等效项
- java - 为什么这个程序不播放我的音乐文件?
- java - Java fx 加载后出现意外的镜像效果
- jquery - jsView jQuery UI 小部件自动完成自定义数据和显示
- python - 导致语法错误的简单python方法
- vba - 使用 VBA 将逗号小数转换为句点小数
- lua - SHA512 纯 Lua 5.1 适配