NetLogo 中具有默认值参数的程序和报告程序

Procedures and reporters with default valued arguments in NetLogo

我是 NetLogo 的新手,但来自以前的函数式编程语言。

有没有办法在程序和报告器中设置默认值?或者规范是为参数设置全局变量?

遗憾的是,不,没有为过程参数、命令或报告器提供默认值的内置方法。我至少可以想到一种替代方案,它可能会提供一些好处,但并不完全相同。

您没有提供您正在做的事情的代码,所以我会做一个玩具示例:

to setup
  clear-all
  make-colony (one-of patches with [pcolor = black]) 10 red 1
  make-colony (one-of patches with [pcolor = black]) 10 blue 1
  make-colony (one-of patches with [pcolor = black]) 10 green 1
  make-colony (one-of patches with [pcolor = black]) 10 orange 1
  make-colony (one-of patches with [pcolor = black]) 10 violet 1
  make-colony (one-of patches with [pcolor = black]) 10 yellow 1
  reset-ticks
end

to make-colony [colony-patch ant-count colony-color ant-size]
  ask colony-patch [
    set pcolor colony-color
    sprout ant-count [
      set shape "bug"
      set color colony-color
      set size ant-size
      fd 1
    ]
  ]
end

您可以使用 anonymous procedures“存储”默认值,但该匿名过程将有固定数量的参数用于非默认值。下面我有起始示例中的“常规”方法,但我构建了一个匿名过程,它提供除颜色之外的通用参数。如果你想在代码中的多个位置使用它,你可以将 make-regular-colony 匿名过程存储在全局变量中,你只需要确保它总是在 运行 该代码之前设置(setup后面的clear-all是个好地方)。

to setup
  clear-all
  let make-regular-colony [ c -> make-colony (one-of patches with [pcolor = black]) 10 c 1 ]
  (run make-regular-colony red)
  (run make-regular-colony blue)
  (run make-regular-colony green)
  (run make-regular-colony orange)
  (run make-regular-colony violet)
  (run make-regular-colony yellow)
  reset-ticks
end

to make-colony [colony-patch ant-count colony-color ant-size]
  ask colony-patch [
    set pcolor colony-color
    sprout ant-count [
      set shape "bug"
      set color colony-color
      set size ant-size
      fd 1
    ]
  ]
end

这个例子不是很好,因为您可以像 foreach [red blue green orange violet yellow] [ c -> make-colony ... ] 一样使用 foreach 来获得相同的效果,但希望它能使思路清晰。