# OCaml 3.11

Version of implementation OCaml of programming language OCaml

The current (Nov 2009) version of Inria’s OCaml implementation.

## Examples:

### Hello, World! - OCaml (78):

`print_endline` is a built-in function defined with the following type:

``````string -> unit = <func>
``````

This means that it takes 1 string as a parameter, and returns the unit type, `()`.

``````let () = print_endline "Hello World";;
``````

### Factorial - OCaml (111):

This example uses an auxiliary function `fact`, so that tail recursion is possible.

``````let rec fact n accum =
if n <= 1 then
accum
else
fact (n-1) (accum*n);;

let factorial n =
fact n 1;;

let () =
for n = 0 to 16 do
Printf.printf "%d! = %d\n" n (factorial n)
done;
``````

### Factorial - OCaml (112):

This example shows the naive way to implement the factorial function. However, it is not tail recursive, since the recursive function call is not the only statement on the line.

``````let rec factorial n =
if n <= 1 then
1
else
factorial (n-1) * n;;

let () =
for n = 0 to 16 do
Printf.printf "%d! = %d\n" n (factorial n)
done;
``````

### Fibonacci numbers - OCaml (154):

This example uses straightforward recursive solution. `Printf.printf` does formatted output.

``````let rec fibonacci n =
if n < 3 then
1
else
fibonacci (n-1) + fibonacci (n-2)

let () =
for n = 1 to 16 do
Printf.printf "%d, " (fibonacci n)
done;
print_endline "..."
``````

### Quadratic equation - OCaml (495):

``````let square x = x *. x;;

let delta  a b c = ( square b-. (4. *. a *. c ));;

let   solve a b c   =
if a=0.
then Printf.printf "Not a quadratic equation\n"
else
if   delta a b c  >= 0.
then
let   x1=( -.b +. sqrt(delta a b c )) /. (2. *. a)
and x2=  (-.b -.  sqrt(delta a b c ))  /. (2. *. a)
in
Printf.printf "x1 =%.5f x2=%.5f \n"  x1  x2
else
let   x= (-.b   /. (2. *. a))
and i=     sqrt(4. *. a *. c -. square b)  /. (2. *. a)
in Printf.printf "x+ =%.5f+i%.5f  x-=%.5f-i%.5f \n"  x  i  x i
;;

let () =
solve (float_of_string Sys.argv.(1))( float_of_string Sys.argv.(2) )(float_of_string Sys.argv.(3))
``````