Jaz*_*ron 1 erlang function max
我是Erlang的新手,但是这里。我想创建一个辅助函数,该函数采用列表中的最高正整数并返回此值。我在代码中的处理方法如下:
-module(function).
-export([normalize/1]).
normalize(List) -> normalize(List, 0).
normalize([], N) -> N;
?normalize([H|T], N) when H > N -> normalize(T, H==N).
Run Code Online (Sandbox Code Playgroud)
我在最后一行不断收到语法错误(怀疑后卫有问题),并且在第一行上也未定义“ function normalize / 2”。我该如何工作?
我不确定为什么H==N在最后一行将H与N()进行比较,但是要解决此问题,您所需要做的就是H==N用just 代替H。这将使其成为像列表一样工作[1,2,3],但它会失败像列表[3,1,2]或者[1,1,1],因为保护检查将失败。
要解决最后一种情况,您需要添加另一个带有卫队检查的功能子句,例如H =< N。以您的代码为基础,这是一个完整的版本
-module(function).
-export([normalize/1]).
normalize(List) -> normalize(List, 0).
normalize([], N) -> N;
normalize([H|T], N) when H > N -> normalize(T, H);
normalize([H|T], N) when H =< N -> normalize(T, N).
Run Code Online (Sandbox Code Playgroud)
但是,有一个函数可以找到列表的max元素,lists:max/1强烈建议您看一下它的实现;这真的很简单。
另外,您的示例不包括列表理解,因此我更新了问题标题和标签。最后一件事,该名称normalize对于功能目的而言不是很好:)。