Caletlog >> Je n'avais que ça à faire une nuit ou deux, donc je ne suis pas la meilleur personne pour en parler mais je note quelques trucs. Pour le typage, c'est fait lors de la compilation, un:
let x = 1 ;;
est forcément un entier tandis qu'un
let x = 0.1 ;;
est forcément un flottant (enfin, peut-être que y'a pas de =, je sais plus :boulet: ), un
let suiv x = x + 1 ;;
est un entier qui attend un entier et qui en retourne un tandis que
let suiv x = x +. 0.4 ;;
est un flottant qui attend un flottant et qui en retourne un.
Ce qui me fait chier, c'est les opérateurs, par exemple *. et * sont différents (le premier pour les flottants et l'autre pour les entiers) ou encore ** (l'exponentation qui ne concerne que les flottants).
Autre chose, il faut toujours déclarer si une fonction est récursive, vu qu'on peut faire de l'impératif avec:
(exemples avec les factorielles)
let rec fact x = if n < 2 then 1 else n * fact(n - 1) ;;
qui peut aussi s'écrire:
let rec fact = function
| 0 -> 1
| n -> n * fact(n - 1) ;;
(la première gère les nombres négatifs, au moins...).
C'est différent surtout, quelque chose de nouveau à apprendre. 