在NetLogo中比较两个列表并统计布尔值的实现方法咨询
NetLogo 代码实现方案
需求说明
我有两个独立列表reality和individuals,取值范围分别为[-1,1]和[-1,0,1],n=30。需要在setup阶段逐元素比较这两个列表:若元素同为-1或1则记为TRUE,否则为FALSE,统计TRUE的数量并将其设为turtle的accuracy属性。
现有代码片段
create-realities 1 [ set shape "square" set dimensions [] repeat m [set dimensions fput one-of [-1 1] dimensions] ] create-individuals n [ set knowledge [] repeat m [set knowledge fput one-of [-1 0 1] knowledge] ;set knowledge to length m with random value (-1,0,1) set accuracy "HERE" ]
修正后的完整代码
create-realities 1 [ set shape "square" set dimensions [] repeat m [set dimensions fput one-of [-1 1] dimensions] ] create-individuals n [ set knowledge [] repeat m [set knowledge fput one-of [-1 0 1] knowledge] ; 生成长度为m的列表,元素随机取自[-1,0,1] ; 计算accuracy属性 let reality-dimensions [dimensions] of first realities let match-results map [k r -> (k = r) and (k != 0)] knowledge reality-dimensions set accuracy length (filter [is-true ?] match-results) ]
关键代码解释
[dimensions] of first realities:获取唯一的reality海龟的维度列表,因为仅创建了1个reality个体,用first直接取第一个即可map [k r -> (k = r) and (k != 0)] knowledge reality-dimensions:逐元素对比个体知识列表和现实维度列表,只有当二者元素相等且不为0时,返回TRUE,否则返回FALSElength (filter [is-true ?] match-results):筛选出所有TRUE结果,统计其数量,该数值即为符合条件的元素个数,赋值给accuracy
内容的提问来源于stack exchange,提问作者Liber
相关产品推荐
相关产品推荐

