【发布时间】:2014-05-31 03:42:57
【问题描述】:
代码如下:
-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 的新手,我自己找不到任何问题。如何纠正?
【问题讨论】:
-
我能找到的最接近的事情是这是一个“已知错误”。这些二郎人是认真的吗?在这种情况下,这是一个巨大的错误!我认为这是您从 Joe Armstrong 本人的“Programming Erlang”中学到的东西,我对这不起作用的核心感到震惊!
-
从 Erlang/OTP 18.0 开始,此代码“仅”在第 7、8 行抛出错误,因为绑定变量在地图中使用是合法的:__________________________________________________________________ 1>
K = thecake, #{K => isalie}._______________________________________________#{thecake => isalie} -
运行版本 20,这仍然是一个错误?!也许我会在生气之前多研究一下,但是……stackoverflow.com/questions/44247735/…
-
@alexakarpov 不,错误(已接受答案中的第 1 点)已在 R18 中修复,并且仍然存在的问题(第 2 点)不是错误。或者更确切地说,这是书中的错误,而不是 Erlang。