let rec fib = function n -> if ( n < 0) then raise (Failure "Gunwo") else if n = 0 then 0 else if n = 1 then 1 else fib (n - 1) + fib (n - 2);; let fib2 = fun n -> let rec fib_tr = fun (n, fib1, fib2) -> if (n < 0) then raise(Failure "Gunwo") else if (n = 0) then fib1 else if (n = 1) then fib2 else fib_tr(n - 1, fib2, fib1 + fib2) in fib_tr(n,0,1);; let x1 = (-2, -1, 0, 1, 2);; let (_, _, x, _, _) = x1;; let x2 = ((1, 2), (0, 1));; let ((_, _), (x, _)) = x2;; let rec initSegment = fun (xs1,xs2) -> if (xs1 = []) then true else if (xs2 = []) then false else if (List.hd xs1 = List.hd xs2) then initSegment(List.tl xs1,List.tl xs2) else false;; let l1 = 1 :: 2 :: [];; let l2 = 1 :: [];; initSegment(l2, l1);; let rec replaceNth = fun (xs, n, el) -> if (n < 0 || xs = []) then raise (Failure "Dupa") else if (n = 0) then el :: List.tl xs else List.hd xs :: replaceNth(List.tl xs,n-1,el);; replaceNth('a' :: 'b' :: 'c' ::[], 5, 'd')