我正在使用setxy函数来设置我的海龟所在的区域。我列出了x值和y值。但我不想在同一点上超过1只乌龟。我不知道如何阻止这种情况发生。这是我正在使用的代码:
create-vcells 20
[ setxy one-of [0 0.6 1.2 1.8 2.4 3]
one-of [0 0.6 1.2 1.8 2.4] ]
有没有人有任何见解?谢谢!
答案 0 :(得分:1)
我认为vcells
是一个品种。我将使用常规turtle
命令,但您将能够弄清楚如何使我的示例适应您的代码。
你可以使用双循环来查看x和y坐标的每个可能组合,将create-
命令放在循环中:
let xs [1 2 3 4]
let ys [10 15 20 25]
foreach xs [
let x ?
foreach ys [
let y ?
create-turtles 1 [setxy x y]
]
]
foreach
遍历列表中的项目(xs
外部的foreach
,内部的ys
)。在foreach
块内,?
引用列表中的当前项,并依次引用每个项。我在外部?
块中将foreach
的值分配给变量,以便我可以从内部xs
块中的foreach
引用其值,其中{{1而是指代?
的一个元素。 (然后我将内部ys
分配给变量也是为了清楚起见。)
如果不是每个坐标组合,你只想按顺序配对x坐标和y坐标,你可以将?
用于多个列表:
foreach
此处(foreach xs ys [
create-turtles 1 [setxy ?1 ?2]
])
引用第一个列表中的当前元素(?1
),xs
引用第二个列表中的当前元素(?2
)。请注意,在这种情况下,您必须将整个表达式包装在括号中。
答案 1 :(得分:0)
您可以生成n个唯一的坐标对(包含在两个列表中),如下所示:
to-report n-pairs [#n #lst01 #lst02]
let _n1 length #lst01
let _n2 length #lst02
let _nmax (_n1 * _n2) ;possible pairs
if (#n > _n1 * _n2) [error "#n is too big"]
let _idxs n-of #n n-values _nmax [?]
report map [(list
item int (? / _n2) #lst01
item (? mod _n2) #lst02)
] _idxs
end