Anno Haskell-eztem én is minimális szinten (guard-ok, stb :)
A higher order functionök igen hasznos dolgok :)
A rekurzió használatában igazad van, némiképp Erlang specifikus az a megközelítés, hogy mindent így oldjunk meg. Itt nincs ugyanis többszöri értékadás a "változóknak". Ha I=5, akkor az mindig is annyi lesz, I++ meg I=6 nincs, ha már egyszer az I változó értéket kapott.
factorial(0) -> 1;
factorial(N) when N > 0 -> N * factorial(N - 1).