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
来获得相同的效果,但希望它能使思路清晰。
我是 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
来获得相同的效果,但希望它能使思路清晰。