La syntaxe d'Ocaml est peut-être un peu déroutante, ms on s'y habitue.
Par contre moi je ne m'habitue pas au développeurs qui ne prenne pas soin de nommer correctement les valeurs. Et ils sont assez nombreux chez les dev ocaml ;)
Haskell et Erlang ont des syntaxes qui mes semblent plus accessibles,
même si Haskell introduit par ailleurs aussi d'autres concepts tout aussi déroutants ;)
"mais qu'est-ce que c'est que ce @@"
Un truc bien avec ocaml, c'est qu'il y a un interpréteur.
Celui ci me dit que @@ est une fonction qui a ce type là
# let ( @@ ) f g x = f (g x);;
val ( @@ ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b =
On est bien avancé me direz vous (avec raison)
Je décode, c'est une fonction qui prends en argument
deux fonction f, et g, et une valeur x.
Les seules contraintes sur f et g, est que la "sortie" de g, doit être du type de l'"entrée de f". C'est pour cela qu'on voit que 'a apparait dans le typage de f, et de g.
La définition elle même est la même qu'en math: on applique g à x, puis on applique f au résultat
Exemple:
# let double x = 2 * x;;
val double : int -> int =
# let couple x = (x,x);;
val couple : 'a -> 'a * 'a =
# couple(double 2);;
- : int * int = (4, 4)
# (@@) couple double 2;;
- : int * int = (4, 4)
# (couple @@ double) 2;;
- : int * int = (4, 4)
La dernière forme est sous forme infixe.
On peut la décomposer pour mieux comprendre
# (couple @@ double);;
- : int -> int * int =
En effet, on est pas obliger d'appliqué complètment une fonction, au lieu d'avoir une valeur "simple" en résultat, on obtient alors une nouvelle fonction.
"c'est quoi ce width _ -> 0"
try .... with ...;;
permet de filtrer les exception.
Là ce qu'il fait c'est que s'il y a une exception, on retourne 0.
Bref, en tout cas il me semble clair que ça n'est pas un exemple idéal pour la programmation fonctionnelle:
l'auteur y introduit bcp de concepts d'un coup. Pour ma part, j'aurai essayé de faire plus clair, quitte à ecrire plus de lignes, et à nommée qq résultats intermediaires.
Mais je pense que Bluestorm a voulu nous montrer qu'il était possible d'écrire cela dans un langages fonctionnel,sans effet de bord, et non pas d'introduire progressivement les concepts de la programmation fonctionnelle.
Si on a jamais vu d'ocaml avant, je comprends que ça puisse faire mal au yeux ;)
[^] # Re: Dommage...
Posté par パパフラクス . En réponse à la dépêche OCaml 3.10.0 est sorti. Évalué à 3.
Par contre moi je ne m'habitue pas au développeurs qui ne prenne pas soin de nommer correctement les valeurs. Et ils sont assez nombreux chez les dev ocaml ;)
Haskell et Erlang ont des syntaxes qui mes semblent plus accessibles,
même si Haskell introduit par ailleurs aussi d'autres concepts tout aussi déroutants ;)
"mais qu'est-ce que c'est que ce @@"
Un truc bien avec ocaml, c'est qu'il y a un interpréteur.
Celui ci me dit que @@ est une fonction qui a ce type là
# let ( @@ ) f g x = f (g x);;
val ( @@ ) : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b =
On est bien avancé me direz vous (avec raison)
Je décode, c'est une fonction qui prends en argument
deux fonction f, et g, et une valeur x.
Les seules contraintes sur f et g, est que la "sortie" de g, doit être du type de l'"entrée de f". C'est pour cela qu'on voit que 'a apparait dans le typage de f, et de g.
La définition elle même est la même qu'en math: on applique g à x, puis on applique f au résultat
Exemple:
# let double x = 2 * x;;
val double : int -> int =
# let couple x = (x,x);;
val couple : 'a -> 'a * 'a =
# couple(double 2);;
- : int * int = (4, 4)
# (@@) couple double 2;;
- : int * int = (4, 4)
# (couple @@ double) 2;;
- : int * int = (4, 4)
La dernière forme est sous forme infixe.
On peut la décomposer pour mieux comprendre
# (couple @@ double);;
- : int -> int * int =
En effet, on est pas obliger d'appliqué complètment une fonction, au lieu d'avoir une valeur "simple" en résultat, on obtient alors une nouvelle fonction.
"c'est quoi ce width _ -> 0"
try .... with ...;;
permet de filtrer les exception.
Là ce qu'il fait c'est que s'il y a une exception, on retourne 0.
Bref, en tout cas il me semble clair que ça n'est pas un exemple idéal pour la programmation fonctionnelle:
l'auteur y introduit bcp de concepts d'un coup. Pour ma part, j'aurai essayé de faire plus clair, quitte à ecrire plus de lignes, et à nommée qq résultats intermediaires.
Mais je pense que Bluestorm a voulu nous montrer qu'il était possible d'écrire cela dans un langages fonctionnel,sans effet de bord, et non pas d'introduire progressivement les concepts de la programmation fonctionnelle.
Si on a jamais vu d'ocaml avant, je comprends que ça puisse faire mal au yeux ;)