计算列表中每个项目出现的次数

sae*_*rad 1 list netlogo

我有一个包含 20 个项目的列表,我想计算列表中每个项目的出现次数。我知道下面的代码

to-report frequency [i lst]
    report length filter [? = i] list
end
Run Code Online (Sandbox Code Playgroud)

但我不想写 20 行

let C1 frequency 1 (list1)
let C2 frequency 2 (list1)
.
.
.
let C20 frequency 20 (list1)
Run Code Online (Sandbox Code Playgroud)

Set*_*sue 5

那是:

map [frequency ? list1] n-values 20 [? + 1]
Run Code Online (Sandbox Code Playgroud)

示例运行:

observer> set list1 [1 4 4 7 10 10 10 14]
observer> show map [frequency ? list1] n-values 20 [? + 1]
observer: [1 0 0 2 0 0 1 0 0 3 0 0 0 1 0 0 0 0 0 0]
Run Code Online (Sandbox Code Playgroud)

对于 NetLogo 6,OP 的功能是这样的:

to-report frequency [an-item a-list]
    report length (filter [ i -> i = an-item] a-list)
end
Run Code Online (Sandbox Code Playgroud)

制作一个频率列表是这样修改的:

map [ i -> frequency i list1] (n-values 20 [i -> i]) 
Run Code Online (Sandbox Code Playgroud)