list_max([H | []]) -> H;
list_max([H | T]) when H > list_max(T) -> H;
list_max([H | T]) when H > list_max(T) -> H;
list_max([H | T]) -> list_max(T).
上面语句编译会出错:在界定(guard)中不能call local/imported function list_max/1。
有些BIF,如is_atom/1, trunc/1, round/1 .. 可以作为界定。
改为:
list_max([H | T]) -> list_max(T, H).
list_max([], Result_now) -> Result_now;
list_max([H | T], Result_now) when H > Result_now -> list_max(T, H);
list_max([_H | T], Result_now) -> list_max(T, Result_now).