<< #include >> (* OK *) letext add (a:int) (b:int) : int = << int c; c = a + b; Return(c); >> (* OK *) letext mult (a:int) (aa:int) : int = << int c; c = a * aa; Return(c); >> (* OK *) letext hello (s:string) : unit = << printf("Hello %s !\n", s); Return(); >> (* OK *) letext echo (n:int) : unit = << printf("%i BOUH ? non 3. ", n); { int n = 3; int i; for(i = 0; i < n; i++) printf("bouh "); } printf("\n"); Return(); >> (* OK *) letext ping_pong1 (n:int) : int = << int c = Int_val(caml_callback( *caml_named_value("fact"), Val_int(n))); printf("1C : ping. fact 4 = %d\n", c); Return(c); >> unregister_fromval : int unregister_toval : int (* OK *) letext ping_pong2 (n:int) : int = << value c = caml_callback( *caml_named_value("fact"), n); printf("2C : ping. fact 4 = %d\n", Int_val(c)); Return(c); >> register_fromval "Int_val" "int" : int register_toval "Val_int" : int (* OK *) letext answer () : int = << Return(42); >> (* OK *) letext truefalse () : bool = << Return(1==2); >> (* OK *) letext guide () : string = << Return("pas de panique"); >> (* OK *) letext float_add (a:float) (b:float) : float = << Return(a+b); >> (* OK *) letext float_mult (a:float) (b:float) : float = << Return(a*b); >> let fact n = let rec fact acc = function 0 -> acc | n -> fact (n*acc) (n-1) in fact 1 n let _ = Callback.register "fact" fact; Printf.printf "%i + %i = %d\n%!" 1 5 (add 1 5); Printf.printf "%i * %i = %d\n%!" 2 4 (mult 2 4); Printf.printf "1Ocaml : pong. fact 4 = %d\n%!" (ping_pong1 4); Printf.printf "2Ocaml : pong. fact 4 = %d\n%!" (ping_pong2 4); Printf.printf "La réponse est %d\n%!" (answer ()); Printf.printf "Que faire ? %s\n%!" (guide ()); Printf.printf "P=NP ? %b !\n%!" (truefalse ()); hello "World"; echo 8; Printf.printf "Float %f + %f = %f = %f !\n%!" 2.71828 3.14159 (2.71828 +. 3.14159) (float_add 2.71828 3.14159); Printf.printf "Float %f * %f = %f = %f !\n%!" 2.71828 3.14159 (2.71828 *. 3.14159) (float_mult 2.71828 3.14159);