Erlang Thursday – lists:max/1

今天我们来学习 lists:max/1。

lists:max/1 接收一个入参,这个入参是一个最少有一个元素的列表,并且它返回这个列表里最大值的元素。这个列表可以由任何Erlang term组成:

1
2
3
4
5
6
lists:max([1, 39, 7, 63, 27, 52, 16]).
% 63
lists:max([q, w, a, r, c, f, m, b]).
% w
lists:max([[1, 2, 3], [1, 2, 4]]).
% [1,2,4]

Erlang在不同类型的term之间有着截然不同的大小顺序,

number < atom < reference < fun < port < pid < tuple < list < bit string
传给lists:max/1函数的列表可以由任意类型的term组成。

1
2
3
4
lists:max([1, 2, 3, 4, a]).
% a
lists:max([1, a, [foo, bar], {baz}]).
% [foo,bar]

因为在Erlang中字符串实际上是数字列表,所以我们甚至可以比较字符串。

1
2
lists:max(["foo", "bar", "baz", "snafu"]).
"snafu"

如果你传入一个空列表给lists:max/1函数,一个 “no function clause matching”的错误将产生,因为该函数需要一个至少有一个元素的列表作为入参。

1
2
lists:max([]).
** exception error: no function clause matching lists:max([]) (lists.erl, line 326)

请您告诉我在以后的Erlang Thursday系列文章里,哪些是您喜欢的Erlang函数,甚至只是你想看到的函数?

如果您想比较Erlang的max函数和Ruby的max方法,别忘了看看上周的Ruby Tuesday系列文章: Ruby Tuesday on Enumerable#max

原文链接: https://www.proctor-it.com/erlang-thursday-lists-max-1/