netlogo - 使用嵌套询问访问 netlogo 中拥有的特征
问题描述
这就是我想要做的:
patches-own[
trait1
trait2
trait3
]
let similarityCounter 0
ask one-of patches[
ask one-of neighbors[
**for-each trait[
if neighborTrait = patchTrait**[
set similarityCounter (similarityCounter + 1)
]
]
]
]
** 之间的部分是我不确定的。如何迭代补丁自己的参数并在补丁和邻居之间进行比较?
解决方案
您如何为每个特征值的补丁创建一个列表并计算两个列表中的匹配项?它看起来像这样。
to testme
let similarityCounter 0
ask one-of patches
[ let mytraits (list trait1 trait2 trait3)
let theirtraits [(list trait1 trait2 trait3)] of one-of neighbors
set similarityCounter length filter [ xx -> xx ] (map = mytraits theirtraits)
]
end
最后一行有点密集。它的作用是使用该map
函数与=
运算符比较两个特征列表,该运算符将返回一个列表true
和false
值,指示该特定特征是否匹配。然后filter
创建一个仅包含true
值的列表并length
计算这些true
值的数量。
不幸的是,NetLogo 并没有像您在某些语言中看到的那样将 atrue
视为 1 和false
0,因此您不能简单地sum
匹配结果列表。
推荐阅读
- html - 如何在 Bootstrap 4 导航栏中悬停拆分按钮
- sass - 没有足够的 mixin 参数:SASS
- ios - iOS 应用程序更新未显示在搜索屏幕上,而仅显示在应用程序页面上,为什么?
- c++ - 错误 C2893 - 无法专门化函数模板 VS2019
- java - 如何从命令行覆盖配置文件属性
- javascript - Webpack 3 到 4 升级 __webpack_hmr 在页面加载时被中断
- javascript - 单击按钮时添加标签
- c - 服务器立即跳过 pin 搜索
- bamboo - Bamboo 中的“停止构建”按钮如何工作?
- c# - 使用 ASP.NET 中的实例值自定义命名 XML 标记