Netlogo:如何查看补丁集的坐标

Netlogo: how to see coordinates of patchset

我的海龟有一个内存,用于存储海龟旅行的补丁:

set memory (patch-set memory patch-here)

如何查看其内存的每个补丁的坐标?

您的 memory 是 patch-set,因此您可以 ask 其成员,就像 ask patches 一样。例如:

to inspect-memory
  ask one-of turtles [
    print word "This is the memory of " self
    ask memory [
      print list pxcor pycor
    ]
  ]
end

或者,考虑上面的报告器(即 list pxcor pycor)只是一个报告器,您可以使用 of 将其应用于任何补丁或补丁组。在那种情况下:

to inspect-memory
  ask one-of turtles [
    print word "This is the memory of " self
    print [list pxcor pycor] of memory
  ]
end

第一个示例将报告单独的列表,对我来说它似乎主要用于打印。第二个例子会报告一个列表的列表,所以它似乎对进一步的操作更有用。

无论如何,我不知道你是否已经考虑过这一点,但请注意,作为 memory 和 patch-set,它的补丁总是以随机顺序出现.如果你想 memory 反映你的乌龟的旅程,那么你必须把它列成一个列表:

turtles-own [
  memory
]

to setup
  clear-all
  create-turtles 1 [
    set memory (list)
  ]
end

to go
  ask turtles [
    right random 360
    move-to patch-ahead 1
    set memory (lput patch-here memory)
  ]
end

考虑到我们现在有补丁列表,您仍然可以实现相同类型的输出。下面的代码使用 foreach 为您提供与上面第一个示例相同的结果(即返回单独列表的代码):

to inspect-memory
  ask one-of turtles [
    print word "This is the memory of " self
    foreach memory [
      p ->
      ask p [
        print list pxcor pycor
      ]
    ]
  ]
end

虽然下面的代码使用 map 为您提供与上面第二个示例相同的结果(即返回列表列表的那个):

to inspect-memory
    ask one-of turtles [
    print word "This is the memory of " self
    print map [p -> [list pxcor pycor] of p] memory
  ]
end

当然,除了将结果打印到命令中心之外,您还可以使用 to-reportreport 将这些 command-procedures 转换为 reporter-procedures;这样结果就可以在代码的其他地方随时可用,以便在需要时进一步使用


无论如何,如果这是您使用 memory 的唯一方式,它会导致您考虑是否可以直接将 memory 作为坐标列表而不是 [=49] =] 您必须从中提取该信息的补丁:

to go
  ask turtles [
    right random 360
    move-to patch-ahead 1
    set memory (lput ([list pxcor pycor] of patch-here) memory)
  ]
end