====== Presentation ======
===== Paradigm ====
* multi-paradigm: imperative, functional, object-oriented.
===== Typing discipline =====
* static typed;
* strongly typed;
* inferred.
====== Learning Objective Caml ======
* [[http://caml.inria.fr/ocaml/ | Official Website]];
* [[http://caml.inria.fr/pub/docs/oreilly-book/ | Developing Applications With Objective Caml]] (in [[http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/ | french]]).
====== Simple examples ======
===== Increment a number =====
# let inc n = n+1;;
val inc : int -> int =
# inc 2;;
- : int = 3
# Alternative:
# let inc = (+) 1;;
val inc : int -> int =
==== Equivalent in Python ====
>>> def inc(n):
... return n+1
>>> inc(2)
3
===== Great common divisor =====
# let rec gcd a b = match (a mod b) with
| 0 -> b
| c -> gcd b c;;
val gcd : int -> int -> int =
# gcd 77 42;;
- : int = 7
==== Equivalent in Python ====
def gcd(a, b):
while b != 0:
(a, b) = (b, a%b)
return a
===== Parity =====
let rec parity = function
| [] -> []
| x::l -> (x mod 2 == 0)::(parity l);;
val func : int list -> bool list =
parity [1;2;3;4;5;6;7;8;9];;
- : bool list = [false; true; false; true; false; true; false; true; false]
==== Equivalent in Python ====
>>> l = [1,2,3,4,5,6,7,8,9]
>>> [(a % 2 == 0) for a in l]
[False, True, False, True, False, True, False, True, False]
===== Ackermann =====
let rec ackermann x y = match (x,y) with
| (0, _) -> y + 1
| (_ , 0) -> ackermann (x - 1) 1
| (_, _) -> ackermann (x - 1) (ackermann x (y - 1));;
==== Equivalent in Python ====
def ackermann(m, n):
if m == 0:
return n + 1
elif n == 0:
return ackermann(m - 1, 1)
else:
return ackermann(m - 1, ackermann(m, n - 1))
===== Factorielle =====
let rec factorielle = function
0 -> 1
| n -> n * factorielle (n - 1) ;;
(* Longueur d'une liste *)
# let rec longueur = function
[] -> 0
| t :: q -> 1 + longueur q ;;
let rec exists p = function
[] -> false
| a::l -> p==a || exists p l;;