Last active
August 29, 2015 14:17
-
-
Save fabian57/fafdf1b4668d25edebaf to your computer and use it in GitHub Desktop.
On dirait que ça marche avec les tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def binary_search(seq, x): | |
def recurs(low, high): | |
if low <= high: | |
mid = low + (high - low) / 2 | |
if x < seq[mid]: | |
return recurs(low, mid-1) | |
elif x > seq[mid]: | |
return recurs(mid+1, high) | |
else: | |
return mid | |
return recurs(0, len(seq) - 1) |
Ok pour la révision, selon moi c'est parfait.
Les deux programmes sont très similaires, ça devrait t'aider à comprendre.
- La construction
let x = e1 in e2
se lit: « valeur de l'expression e2, mais avec tous lesx
remplacés par l'expressione1
». - Il n'y a pas de
return
car tout est expression. Par exemple, leif c then e1 else e2
est une expression (exactement équivalente àc?e1:e2
en C oue1 if c else e2
en Python. - Une expression a un et un seul type: par exemple, dans
if c then e1 else e2
, lese1
ete2
ne peuvent pas être de type différent. Ça pose un problème pour cette fonction qui doit renvoyer soit un entier (indice), soit rien du tout si l'élément n'existe pas. On contourne le problème en étendant le type entier d'une valeur supplémentaire qui signifie: « absence de valeur ». C'est un typeoption
. Ici, un entier « optionnel » est soit un certain entierx
(Some x
), soit rien du tout (None
).
Mais je suis d'accord que le paradigme fonctionnel est difficile à comprendre à partir du moment où l'on a été « formaté » avec de l'impératif. C'était mon cas, et j'ai dû oublier et réapprendre OCaml plusieurs fois avant de l'intégrer complètement.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Eh bien merci beaucoup
Et je ne comprends pas grand chose à Ocaml... j'ai un ami en prépa qui m'a montré très rapidement et je comprends vraiment que les trucs de base....