我有两个代理集。 是否有函数可以找到:
- 同时存在于两个代理集中的代理集(交集)
- 只存在于一个代理集而不在另一个代理集中的代理集
我发现手动实现这一点非常困难,特别是当它需要在三重ask
内部时。
理想情况下,使用类似于with
语法:
let cross set1 and-in set2
let uniq set1 with [color = red] not-in set2
简单的问题如“代理A是否在代理集合X中?”有一些问题。
我有两个代理集。 是否有函数可以找到:
我发现手动实现这一点非常困难,特别是当它需要在三重ask
内部时。
理想情况下,使用类似于with
语法:
let cross set1 and-in set2
let uniq set1 with [color = red] not-in set2
对于第一个问题,你需要使用turtle-set
原语。对于第二个问题,你需要使用member?
原语,它也可以用于代理集。因此:
to setup
ca
create-turtles 10 [set color red]
create-turtles 10 [set color blue]
let red-ones turtles with [color = red]
let blue-ones turtles with [color = blue]
;join 2 agent sets
let joinset (turtle-set red-ones blue-ones)
show joinset
let even-ones (turtles with [who mod 2 = 0])
;subtract even-ones from red-ones
let subtractset red-ones with [not member? self even-ones]
show subtractset
end
[with]
可以接收一个 "reporter"。我的第一个问题是要找到一个交集,而不是一个并集,但看到你对第二个问题的回答,我猜想它应该像red-ones with [member? self even-ones]
这样简单。谢谢! - Mikhailwith
结构中使用self
。一开始我尝试了?
,但是收到了一个错误信息,然后再没有其他想法继续进行。 - RussAbbott