Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用BIF和lists:maps时出现Erlang异常错误_List_Exception_Map_Erlang_Normalize - Fatal编程技术网

使用BIF和lists:maps时出现Erlang异常错误

使用BIF和lists:maps时出现Erlang异常错误,list,exception,map,erlang,normalize,List,Exception,Map,Erlang,Normalize,我们的任务是编写一个函数normalize/1,将列表中的每个元素划分为my max元素 以下是我迄今为止的代码(我使用内置函数来查找max,而不是自己编写的函数): 终端显示如下: 测试3:normalize2([1,2,3,5])。 **异常错误:没有函数子句匹配列表:max(1)(lists.erl,第313行) 在函数test3中:normalize/1(test3.erl,第85行) 从列表中调用:map/2(lists.erl,第1224行) 更新: 以下是查找\u max/1: f

我们的任务是编写一个函数normalize/1,将列表中的每个元素划分为my max元素

以下是我迄今为止的代码(我使用内置函数来查找max,而不是自己编写的函数):

终端显示如下:

测试3:normalize2([1,2,3,5])。 **异常错误:没有函数子句匹配列表:max(1)(lists.erl,第313行) 在函数test3中:normalize/1(test3.erl,第85行) 从列表中调用:map/2(lists.erl,第1224行)

更新:

以下是查找\u 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,终端会显示:

测试3: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(列表),

列表:max从列表返回max值。这意味着这个函数的参数必须是list

当您调用list:map时,它的意思是——对每个列表项应用一些函数(在您的例子中为“normailze”)。但是列表项是整数。这就是为什么行
Z=lists:max(List)
抛出异常(变量List实际上不是List)

您可以使用lists:map替换列表理解。有点

normalize2(List) -> Z = lists:max(List), lists:map( fun(X) -> X/Z end, List).

列表:最大值从列表返回最大值。这意味着这个函数的参数必须是list

当您调用list:map时,它的意思是——对每个列表项应用一些函数(在您的例子中为“normailze”)。但是列表项是整数。这就是为什么行
Z=lists:max(List)
抛出异常(变量List实际上不是List)

您可以使用lists:map替换列表理解。有点

normalize2(List) -> Z = lists:max(List), lists:map( fun(X) -> X/Z end, List).

由于您已经了解了如何在
normalize/1
中使用列表理解,因此可能没有必要使用
lists:map/2
编写“不同”的解决方案


一定要培养一种心理反射,用一个漂亮的列表来代替任何使用
列表:map/2

既然您已经在
normalize/1
中了解了如何使用列表理解,那么使用
lists:map/2
编写“不同”的解决方案可能就没有意义了


一定要培养一种心理反射,用一个漂亮的列表来代替任何使用
列表:map/2

如果我在normalize/1中使用我自己的find_max/1函数,它会显示相同的错误,但不是“no function子句匹配列表:max(1)”,而是no function子句匹配列表:max(1,0)。如果我在normalize/1中使用我自己的find_max/1函数,它会显示相同的错误,而不是“no function子句匹配列表:max(1)”没有函数子句匹配列表:max(1,0)。如果我的输入是[1,2,3,4],并且我使用了find_max/1,它会给出类似于[4]的答案。如果我在上面写的normalize2上使用它,我会在terminal:test3:normalize2([1,2,3,4])*中得到它异常错误:在函数列表中没有与test3匹配的函数子句:'-normalize/1-lc$^0/1-0-'(1)(test3.erl,第86行):map/2(lists.erl,第1224行)1)find_max是什么?2) 你是怎么用的?3) 如果你能提供完整的测试就更好了。谢谢你的回答。我希望我能投票支持你的答案,但我的声望还不够。再次感谢。如果我的输入是[1,2,3,4],并且我使用了find_max/1,它会给出类似于[4]的答案。如果我在上面写的normalize2上使用它,我会在terminal:test3:normalize2([1,2,3,4])*中得到它异常错误:在函数列表中没有与test3匹配的函数子句:'-normalize/1-lc$^0/1-0-'(1)(test3.erl,第86行):map/2(lists.erl,第1224行)1)find_max是什么?2) 你是怎么用的?3) 如果你能提供完整的测试就更好了。谢谢你的回答。我希望我能投票支持你的答案,但我的声望还不够。再次感谢,为什么?是因为它更容易阅读,还是我遗漏了一些信息?确实没有其他原因<代码>列表:map/2相当于理解,可以避免编写匿名函数。为什么?是因为它更容易阅读,还是我遗漏了一些信息?确实没有其他原因<代码>列表:map/2相当于理解,可以避免编写匿名函数。
normalize2(List) -> Z = lists:max(List), lists:map( fun(X) -> X/Z end, List).