Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1778 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Question sur OCAML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur OCAML

n°1182700
Urilo
Posté le 23-08-2005 à 19:01:29  profilanswer
 

Bonjour j'apprend OCAML
mais je ne comprend pas ce que signifie, les trucs du genre
int -> int -> (int * int) = <fun>
Quelqu'un peut il m'expliquer ?

mood
Publicité
Posté le 23-08-2005 à 19:01:29  profilanswer
 

n°1182810
el muchach​o
Comfortably Numb
Posté le 23-08-2005 à 22:26:23  profilanswer
 

Ta fonction prend 2 entiers et un couple d'entiers et retourne une fonction.
La raison de cette notation bizarre, c'est que tu peux toujours omettre de renseigner les derniers paramètres lors de l'appel de la fonction, Ocaml considère que c'est une fonction. C'est une particularité des langages fonctionnels tirée du lambda-calcul.

n°1182820
eL_Shaman_​__
Plop.
Posté le 23-08-2005 à 22:44:40  profilanswer
 

Pour ce que je me souviens...
 
Cette écriture est comme celle qu'on utilise en maths pour des fonctions : dom -> img  , le domaine de définition à gauche et l'ensemble obtenu (l'image) pour la fonction courante.
Ici, on a des types des deux cotés de la flèche.
 
Par exemple, « int -> int » indique une fonction qui prend un entier en paramètre et retourne un entier :
let add_2 a = a + 2;;
 
On peut peut mettre plus d'un paramètre dans la signature d'une fonction :
let add_a_and_b a b = a + b;;
La signature est alors : « int -> int -> int ». C'est une notation fonctionnelle qu'il faut parenthéser comme suit : (int -> int) -> int. l'évaluation de la fonction « add_a_and_b 5 4 » s'opère alors en 2 temps puisqu'il y a 2 arguments :
1/ on évalue l'appel « add_a_and_b 5 ». Cela va retourner la fonction « int -> int ». On va l'appeller f;
2/ on évalue l'appel « f 4 ». Ce coup-ci, on obtient un entier, à savoir 9.
(dans la réalité, il y a des optimisations... mais on va rester dans la théorie)
Ce type d'écriture des paramètres est la notation curryfiée et elle permet des évaluations partielles.
 
À la place de cette notation, on peut utiliser des n-uplets. Par exemple :
let add_a_and_b (a, b) = a + b;;
Cette fois, la signature de la fonction est « int * int -> int ». L'inconvénient de cette notation est qu'elle ne permet pas d'évaluation partielle.
 
Un autre exemple :
let decurr a b = (a, b);;
Sa signature : 'a -> 'b -> 'a * 'b
On prend 2 paramètres de types quelconques et on en retourne un 2-uplet.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Question sur OCAML

 

Sujets relatifs
[question a 2 euros] Où placer un fichier type login.php ?question simpa :-p url..
Express !!!! Question sur les états accessPetite question sur les sessions
question programation !!commande sur plusieurs lignes pour question de lisibilité
Question à la con sur les sauts de ligne....question bete : site web
Une question bête sur les sessions (isset)[Delphi] Question sur COM
Plus de sujets relatifs à : Question sur OCAML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR