let rec f n = if n = 0 then true else g (n-1) g n = if n = 0 then false else f (n-1) val f : int -> bool = val g : int -> bool =
true false n =0 f (n) n =0 g (n) n -1 n n oui non
let d = function f -> (f 0) ;; d int f ‘a Type : (int -> ‘a) -> ‘a
d (function x -> x+1) = let d = function f -> ( f 0 ) ;; d ( function x -> "argument" ^ (if x=0 then "" else "non") ^ "nul ") = 0+1 = 1(function x -> x+1) 0 = (function x -> "argument" ^ (if x=0 then "" else "non") ^ "nul") 0 = "argument " ^ (if 0 =0 then "" else "non ") ^ "nul" = "argument " ^ "" ^ "nul" = "argument nul " f
fun f x y -> (f x) y ;; g = function f -> function x -> function y -> (f x) y ;; g x : ‘a f y : ‘b f x ‘c x : ‘a * ‘c y : ‘b - : ('a -> 'b -> 'c) -> 'a -> 'b -> 'c = <fun>
fun f x y -> (f x) / (f y) ;; Paramètres de la fonction 123 function f -> function x -> function y -> (f x) / (f y) ;;
fun f x y -> (f x) / (f y) ;; x : ‘a f (f x) : ‘int * * x : ‘a y : ‘aint ('a -> int) -> 'a -> 'a -> int = <fun>
fun f x y -> f x, y ;; Premier paramètre Deuxième paramètre Troisième paramètre Corps de la fonction f x, y Couple dont la première composante est f (x) et la deuxième composante est y
x : ‘a (f x) : ‘b f x : ‘a ‘b*’c y : ‘c fun f x y -> f x, y ;; - : ('a -> 'b) -> 'a -> 'c -> 'b * 'c =
fun f x y -> f (x, y) ;; ‘a*’b ‘c ‘a ‘b ‘c Type : - : (‘a*’b) -> ‘a ->’b -> ‘c
fun f x y -> f ( x y f) ;; function f -> function x -> function y -> f ( x y f) ;;
fun f x y -> f ( x y f) ;; ‘a f ‘b y:‘c x (X y) ‘a ‘c‘b (a -> b) -> (c -> (a -> b) ->a) -> c -> b (a->b)->((c->((a->b)->a))->(c->b)) ‘a f ‘b
fun f x y -> (f x) (y f) ;; ‘a f ‘b ‘c y f (x) ‘a ‘c - : ('a -> 'b -> 'c) -> 'a -> (('a -> 'b -> 'c) -> 'b) -> 'c = <fun> x ----> ‘a ‘b y (f ) ----> ‘b (f x) (y f) ----> ‘c f
Let fact = funtion 0 -> n | n -> n * fact (n-1);; Let negation = function true -> false | false -> true ;; Définition de fonction par filtrage
let entier_it f a = let rec g = function 0 -> a | n -> f (g (n-1)) in g ;; val entier_it : ('a -> 'a) -> 'a -> int -> 'a = <fun> 'a int 'a