gpt4 book ai didi

map - Erlang map 上的非法图案

转载 作者:行者123 更新时间:2023-12-03 12:54:39 30 4
gpt4 key购买 nike

代码如下:

-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中编译代码时,报告了以下错误:

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的新手,自己找不到任何错误。如何纠正?

最佳答案

来自IRC(#erlang @ freenode)的答案:


尚不支持将变量作为匹配项中的键(版本17.0)
一个更普遍的问题会影响函数的匹配参数:第7行的H匹配2次;或一次,然后用于匹配N。 (此问题也与二进制文件一起出现)


这应该在以后的版本中解决。

从版本17开始,this起作用:

-module(count_chars).
-export([count_characters/1]).

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

%% maps module functions cannot be used as guards (release 17)
%% or you'll get "illegal guard expression" error
count_characters([H|T], X) ->
case maps:is_key(H,X) of
false -> count_characters(T, maps:put(H,1,X));
true -> Count = maps:get(H,X),
count_characters(T, maps:update(H,Count+1,X))
end;
count_characters([], X) ->
X.


这是另一个版本(仅在18上进行了测试),与书中的版本稍微相似:

-module(count_chars).
-export([count_characters/1]).

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

count_characters([H|T], X) ->
case maps:is_key(H,X) of
false -> count_characters(T, X#{ H => 1 });
true -> #{ H := Count } = X,
count_characters(T, X#{ H := Count+1 })
end;
count_characters([], X) ->
X.

关于map - Erlang map 上的非法图案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23106543/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com