访问netlogo表中的所有元素

访问netlogo表中的所有元素,netlogo,Netlogo,我建立了一个模型,海龟在其中穿越一个环境,并建立一个表(使用表扩展名),该表表示它们访问每个特定位置的次数,其中可能有几千次(这些都是在该位置的“谁”上键入的) 这种方法相当有效,因为它可以让不经常走动的海龟比经常走动的海龟储存更小的结构 然而,我想实现一个过程,每这么多个周期减少一次访问计数,这样海龟表中的每一项都会减少一定量。我正在努力寻找一种方法,在不指定所有键的情况下访问表中的所有项 有人知道如何轻松做到这一点吗?还是说桌子的设计根本就不是这样 非常感谢好的-就这样-通常情况下,一旦您指

我建立了一个模型,海龟在其中穿越一个环境,并建立一个表(使用表扩展名),该表表示它们访问每个特定位置的次数,其中可能有几千次(这些都是在该位置的“谁”上键入的)

这种方法相当有效,因为它可以让不经常走动的海龟比经常走动的海龟储存更小的结构

然而,我想实现一个过程,每这么多个周期减少一次访问计数,这样海龟表中的每一项都会减少一定量。我正在努力寻找一种方法,在不指定所有键的情况下访问表中的所有项

有人知道如何轻松做到这一点吗?还是说桌子的设计根本就不是这样


非常感谢

好的-就这样-通常情况下,一旦您指定了您的问题,您就可以找到解决方案

这可以通过从表中返回所有键,然后使用foreach遍历它们并逐个访问每个元素来实现

to decay

    let memory table:keys location-visits

    foreach memory
    [
        x -> let visits table:get location-visits x
        table:put location-visits x (visits - 1)
    ]

end
我的真实版本也会检查以确保访问量不会降到零以下

在这个阶段,这似乎相对有效-但如果有更快的方法,我会很高兴-谢天谢地,我不是每个周期都运行这段代码

希望这对某人有用——我现在觉得自己很傻


干杯

扩展上有一个未解决的问题,建议添加一个
表:映射
过程,该过程将完全满足您的需要,这里:

在该期中,Bryan Head提出了一个NetLogo实现这样一个原语:

to-report table-map [ tbl fn ]
  report table:from-list map [ entry ->
    list (first entry) (runresult fn last entry)
  ] table:to-list tbl
end
在您的情况下,它的使用方式如下:

set location-visits table-map location-visits [ visits -> visits - 1 ]
这可能比您自己的解决方案快,也可能不快,但可能值得一试。主要的优点是,如果
table:map
成为现实,那么您的代码只需更改一个字符(从
-
)就可以利用它