List NetLogo:在已选择项目后将其从列表中排除

List NetLogo:在已选择项目后将其从列表中排除,list,random,netlogo,List,Random,Netlogo,我正在使用setxy函数来设置我的海龟将被放置的区域。我列出了x值和y值。但我不想在同一点上超过一只海龟。我不知道如何阻止这种事情发生。这是我为此使用的代码: 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] ] 有人有什么见解吗?谢谢 我假设vcells是一个品种。我将使用常规的turtle命令,但您将能够了解如何使我的示例适应您的代码 您可以使用双循环

我正在使用setxy函数来设置我的海龟将被放置的区域。我列出了x值和y值。但我不想在同一点上超过一只海龟。我不知道如何阻止这种事情发生。这是我为此使用的代码:

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] ]

有人有什么见解吗?谢谢

我假设
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
块中
的值分配给一个变量,以便我可以从内部
foreach
块中的
xs
引用它的值,其中
将引用
ys
的一个元素。(为了清楚起见,我还将内部的
赋值给了一个变量。)

如果您只想按顺序配对x坐标和y坐标,而不是每个坐标组合,则可以对多个列表使用
foreach

(foreach xs ys [
  create-turtles 1 [setxy ?1 ?2]
])

此处
-1
指第一个列表中的当前元素(
xs
),而
-2
指第二个列表中的当前元素(
ys
)。请注意,在这种情况下,您必须将整个表达式括在括号中。

您可以生成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

您可以创建所有可能的x、y组合,然后从中选择
n个组合。没想到!谢谢我会尽力做到的。键入所有的组合可能需要一段时间,除非你知道如何从我的列表中生成所有可能的x,y组合。我在问题中提出的是清单的简短版本。我在每个列表中大约有55个。非常感谢你!太棒了!非常感谢你的帮助!我真的很感激!