Partage

[Ocaml] Fonction purement fonctionnel

14 mai 2018 à 20:16:10

Bonjour,

 Je viens de trouver ce type pour définir les itérateurs en ocaml ('a -> unit) -> unit sur un livre, j'ai lu que c'estpurement fonctionnel et qu'on ne peux pas ecrire map2 , je voudrais savoir ce que veut dire purement fonctionnel ici ou sont les effets de bord et pourquoi on ne peut pas ecrire map2 en utilisant cette structure

Merci :)

-
Edité par CamilleFaure 14 mai 2018 à 20:17:27

Vous êtes demandeur·se d'emploi ?
Sans diplôme post-bac ?

Devenez Développeur·se web junior

Je postule
Formation
courte
Financée
à 100%
15 mai 2018 à 9:08:44

Salut, d'après wikipédia (https://fr.wikipedia.org/wiki/Programmation_fonctionnelle) purement fonctionnel veut juste dire qu'il n'y a pas d'éléments impératifs donc pas d'effets de bord.

15 mai 2018 à 17:04:11

Tu peux nous donner plus de détails ?
Les itérateurs sur une structure de données (par ex une liste) sont généralement iter (et iteri), map (et mapi, rev_map) et fold.
Les itérateurs sur deux structures de données (par ex deux listes) sont iter2, map2, fold2.

Dis-nous à quoi correspond le type que tu nous a donné, quelle est la structure de données que tu considères, et ce que tu veux faire avec.
16 mai 2018 à 6:56:54

En fait c'est concernant batteries j'ai trouvé qu'il existe différentes structures de données ils ont cités les enumérations (Enum de batteries) les séquences et aussi les iterateurs la définition du type de ce dernier et comme je l'ai donné ils disent que c'est purement fonctionnel (il existe des efftes de bord mais caché a l'interieur de la structure et ils ne sont pas visibles depuis l'exterieur) c'est tout ce qu'ils ont dit sur ca et jarrive pas vraiment à voir ou sont les effets de bord ou quoi est du cette explication

16 mai 2018 à 13:32:06

Dans Batteries, il y a effectivement les structures de données Enum et Seq.
Les itérateurs, eux, sont des fonctions que l'on appelle sur une structure de donnée particulière.

Par exemple, List.iter a comme type :
iter : ('a -> unit) -> 'a list -> unit
ie elle prend 1) une fonction qui s'applique sur chaque élément de la liste, 2) une liste. Il s'utilise par ex comme ceci :
List.iter (fun element -> print_int element) [1; 2; 3];;
et affiche :
123

Le type unit est une absence de résultat (pas de valeur retournée), mais ça ne veut pas dire pour autant qu'il ne se passe rien. Tu peux par exemple utiliser des fonctions d'affichage, comme je l'ai fait.

Pour les autres structures de données, ça va être peu ou prou la même chose : l'itérateur iter prend en paramètres 1) une fonction qui s'applique sur un élément de la structure de données, 2) la structure de données. Son type sera donc :
('a -> unit) -> 'a t -> unit
t est le type de la structure de données (List, Seq, Enum, etc).
17 mai 2018 à 9:03:40

merci et pour l'explication sur les effets de bord donnée cela veut dire quoi dans ce cas?

[Ocaml] Fonction purement fonctionnel

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown