Retomando el ejercicio de buscar el mayor con erlang.
Vamos a buscar el menor y el mayor, pero estos algoritmos son muy similares solo hay que cambiar el mayor por el menor.
El mayor y menor se pueden ver como una función que dado dos objetos retorne el mayor o el menor según corresponda y esta función se la podemos enviar a una función que nos permita encontrar el mayor o menor. Algo así:
-module(test).
-export([max/1, min/1]).
max(L) -> buscar(L, fun(X, M) -> X > M end).
min(L) -> buscar(L, fun(X, M) -> X < M end).
buscar([X], _) -> X;
buscar([X|T], FX) ->
M = buscar(T, FX),
COND = FX(X, M),
if COND -> X;
true -> M
end.
Y a compilarlo y probarlo :
21> c(test).
{ok,test}
22> test:max([1,2,3,4,5]).
5
23> test:min([1,2,3,4,5]).
1
24>