我写了一个简单的函数来获取字符串中每个字符的出现次数:
count([], Result) ->
Result;
count([Head|Tail], #{Head := Count} = Result) ->
count(Tail, Result#{Head := Count +1});
count([Head|Tail], Result) ->
count(Tail, Result#{Head => 1}).
但显然地图的模式匹配有问题。
我得到variable 'Head' is unbound
。从文档来看,它似乎不是一种非法模式,可以使用变量或列表。
所以,我做错了什么(如果是,你可以解释什么/为什么)或者是否还有其他尚未实现的地图呢?
答案 0 :(得分:2)
您无法在功能头的地图键上使用模式匹配 - 请查看this example或this other answer。
但是,您可以使用is_key/2
功能检查它是否存在。
或者,您可以使用maps:get/3的默认部分:
count([], Result) ->
Result;
count([Head|Tail], Result) ->
Count = maps:get(Head, Result, 0),
count(Tail, Result#{Head => Count + 1}).
或者使用update_with/4使用setter函数。