-module(ex04). -compile(export_all). ajout(X, Y) -> X + Y. one() -> 1. two() -> 2. %----- ajoutF(X, Y) -> X() + Y(). %----- incr(X) -> X + 1. decr(X) -> X - 1. map(_, []) -> []; map(F, [ Head | Tail ]) -> [ F(Head) | map(F, Tail) ]. increment(L) -> map(fun incr/1, L). decrement(L) -> map(fun decr/1, L). %----- addOne() -> fun(X) -> X + 1 end. add(A) -> fun(X) -> X + A end. addA() -> A = 1, fun(X) -> X + A end. cacheX(A) -> X = 1, F = fun(X) -> X + A end, F(2). %% base(A) -> %% B = A + 1, %% F = fun() -> C = A * B end, %% F(), %% C. %------ Petits exos long(L) -> F = fun([], Acc, _) -> Acc; ([_|T], Acc, Fun) -> Fun(T, Acc + 1, Fun) end, F(L, 0, F). derive(F, H) -> fun(X) -> (F(X + H) - F(X)) / H end. %--------------------------------------------- % Main function %--------------------------------------------- main() -> ajout(1,2), ajout(one(), two()), ajoutF(fun one/0, fun two/0), L = lists:seq(1, 6), map(fun incr/1, L), map(fun decr/1, L), LL = [ lists:seq(1, 3), lists:seq(1, 4), lists:seq(1, 6) ], map(fun lists:reverse/1, LL), map(fun(X) -> X + 1 end, L), map(fun(X) -> X - 1 end, L), MyF = addOne(), MyF(3), (addOne())(3), Add3 = add(3), Add1 = add(1), Add3(4), Add1(4), map(add(1), L), map(add(-1), L), long(lists:seq(1, 20)), F = fun(X) -> X * X end, io:format("F(3) = ~f et F'(3) = ~f~n", [ F(3.0), (derive(F, 0.001))(3) ]), ok.