首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Erlang地图中的非法模式

Erlang地图中的非法模式
EN

Stack Overflow用户
提问于 2014-04-16 18:18:22
回答 4查看 4.3K关注 0票数 19

代码如下:

代码语言:javascript
复制
-module(map_demo).
-export([count_characters/1]).

count_characters(Str) ->
count_characters(Str, #{}).

count_characters([H|T], #{ H => N } = X) ->
    count_characters(T, X#{ H := N+1 });
count_characters([H|T], X) ->
    count_characters(T, X#{ H => 1});
count_characters([], X) ->
    X.

在Erlang shell中编译代码时,它报告了以下错误:

代码语言:javascript
复制
1> c(map_demo).
map_demo.erl:7: illegal pattern
map_demo.erl:8: variable 'N' is unbound
map_demo.erl:10: illegal use of variable 'H' in map
map_demo.erl:7: Warning: variable 'H' is unused
error

我是Erlang的新手,我自己找不到任何错误。如何纠正它?

EN

回答 4

Stack Overflow用户

发布于 2014-04-17 10:44:43

当你想要匹配一个地图时,你需要这样:

代码语言:javascript
复制
#{key1 := Pattern1, key2 := Pattern2, ...} = VarContainingAMap.

您可以阅读该文档:https://joearms.github.io/published/2014-02-01-big-changes-to-erlang.html

票数 1
EN

Stack Overflow用户

发布于 2015-02-18 23:06:25

@EWit,Felipe Mafra:

maps做了它应该做的事情;这里缺少的是reduce部分:

代码语言:javascript
复制
count(Str) -> M = count_chars(Str, maps:new()), % maps part, bad naming
    L = maps:to_list(M),                        % to be able to sum
    N = [X || {_,X} <- L],                      % strip the numbers
    lists:sum(N).                               % sum them up

count_chars([H|T], Map) when is_map(Map)->
    N = maps:get(H, Map, 0),
    count_chars(T, maps:put(H, N + 1, Map));
count_chars([], Map) -> Map.
票数 1
EN

Stack Overflow用户

发布于 2014-04-16 18:46:08

匹配语法中存在问题。

Fof匹配使用:=。示例

test(#{ key := Test }) -> Test.

对于关联的键和值,请使用=>。示例:M = #{ keynew => 123 }

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23106543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档