【发布时间】:2014-09-17 23:34:25
【问题描述】:
我们的任务是编写一个函数 normalize/1,它将列表中的每个元素除以我的最大元素。
这是我到目前为止的代码(而不是我自己编写的函数,我使用内置函数来查找最大值):
normalize(List) ->
Z = lists:max(List),
[ X / Z || X <- List].
现在我必须编写一个名为 normalize2 的函数,它的作用与 normalize/1 相同,但使用 lists:map/2
normalize2(List) -> lists:map(fun normalize/1, List).
终端显示如下:
test3:normalize2([1,2,3,5])。 ** 异常错误:没有与列表匹配的函数子句:max(1)(lists.erl,第 313 行) 在函数 test3:normalize/1 中(test3.erl,第 85 行) 从列表调用:map/2(lists.erl,第 1224 行)
更新:
这里是 find_max/1:
find_max([T]) ->
T;
find_max([H,H1|T]) when H > H1->
find_max([H,T]);
find_max([_H,H1|T])->
find_max([H1|T]).
如果我使用 ^ find_max,终端会显示:
test3:normalize2([1,2,3,5])。 ** 异常错误:没有与 test3:find_max(1) 匹配的函数子句(test3.erl,第 137 行) 在函数 test3:normalize/1 中(test3.erl,第 84 行) 从列表调用:map/2(lists.erl,第 1224 行)
第 137 行是 find_max([T]) -> T; 第 84 行是 Z = find_max(List),
【问题讨论】:
-
如果我在 normalize/1 中使用了自己的 find_max/1 函数,它会显示相同的错误,但不是“没有函数子句匹配列表:max(1)”而是没有函数子句匹配列表:最大(1,0)。
标签: list exception map erlang normalize