首页 > 解决方案 > 如何在 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。

你能解释一下为什么吗?

我想我没写对,你能帮忙吗?谢谢你

标签: netlogo

解决方案


看起来你在正确的轨道上。到 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.


推荐阅读