【发布时间】:2021-03-07 15:48:50
【问题描述】:
我在为旧的 Advent of Code 任务编写一些简单的 erlang 代码时遇到了问题。
下面的程序应该读取行,按出现次数对字符串中的字符进行分组,然后计算重复三个字符的行数。
count_occurrences([], Map) -> Map;
count_occurrences([H | T], Map) ->
count_occurrences(T, maps:put(H, maps:get(H, Map, 0) + 1, Map)).
count(Line, Count) ->
Map = count_occurrences(Line, #{}),
case lists:member(3, maps:values(Map)) of
true -> Count + 1;
false -> Count
end.
run() ->
{ok, Binary} = file:read_file("data.txt"),
Lines = binary:split(Binary, <<"\n">>, [global]),
Result = lists:foldl(fun count/2, 0, Lines),
Result.
但是,我收到以下错误消息:
10> c(day2).
{ok,day2}
11> day2:run().
** exception error: no function clause matching day2:count_occurrences(<<"bpacnmelhhzpygfsjoxtvkwuor">>,#{}) (day2.erl, line 5)
in function day2:count/2 (day2.erl, line 10)
in call from lists:foldl/3 (lists.erl, line 1263)
我不明白为什么<<"bpacnmelhhzpygfsjoxtvkwuor">>,#{} 与第二个“count_occurrences”函数子句不匹配——字符串与列表相同,对吧?为什么不匹配 [H | T]?
【问题讨论】:
标签: erlang