Précédent   Forum des professionnels en informatique > Autres langages > Langages fonctionnels > F#
F# Forum d'entraide sur la programmation en langage fonctionnel F#
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2008, 19h40   #1
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 774
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 774
Points : 14 303
Points : 14 303
Par défaut passer en #light ce module

Salut,


J'essaie en vain de passer ce module en version #light

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
module Environment : 
  sig
    val assign : environment -> string -> valeur -> unit
    val find : environment -> string -> valeur
    val create : int -> environment
    val iter : (string -> valeur -> unit) -> environment -> unit
  end = struct
    //include Hashtbl
    let create i : environment = Hashtbl.create i
    let find env (v : string) : valeur = Hashtbl.find env v
    let iter f (env : environment) = Hashtbl.iter f env 

    let assign env (v : string) (val_expr : valeur) =
      try 
        let _ = Hashtbl.find env v
        Hashtbl.replace env v val_expr 
      with Not_found -> 
        Hashtbl.add env v val_expr 
  end
pour infos, il passe en syntaxe normale

au passage, le sig ne sert à rien puisque le include n'a pas marché
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 20h01   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
Si tu veux déclarer un module, fais juste :

Code :
1
2
module foo =
  let f x = ...
Le "end" à la fin est optionnel.

Pour le include, tu peux faire :

Code :
1
2
3
module Environment = Hashtbl
module Environment =
  // tes fonctions
Tu peux d'ailleurs ajouter des fonctions à n'importe quel module existant, avec la 2e ligne.

Pour la signature, elle devrait normalement aller dans un fichier .fsi.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 21h40   #3
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 774
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 774
Points : 14 303
Points : 14 303
ça marche, mais c'est un peu lourd à utiliser :
Code :
1
2
3
4
> module Environment = Hashtbl 
> module Environment = struct let assign env v expr = Hashtbl.add env v expr end;;
>  let env : (string,int) Hashtbl.t = Environment.create 10;;

Citation:
Envoyé par LLB Voir le message
Pour la signature, elle devrait normalement aller dans un fichier .fsi.
ben j'aimerais bien pouvoir tout mettre en le fichier .fs comme en OCaml...
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 11h45   #4
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 774
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 774
Points : 14 303
Points : 14 303
finalement, je passerais pas un fsi plus tard... pour le moment, j'expose tout


voilà mon code :
Code :
1
2
3
4
5
6
7
8
9
10
module Environment = Hashtbl
module Environment =
    let create i : environment = Hashtbl.create i

    let assign env (v : string) (val_expr : valeur) =
      try 
        let _ = Hashtbl.find env v
        Hashtbl.replace env v val_expr 
      with Not_found -> 
        Hashtbl.add env v val_expr

nb : j'ai quand même spécifié create, sinon il fallait que je spécifie systématiquement le type renvoyé par Environment.create (donc Hashtbl.create)
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 17h38   #5
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 774
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 774
Points : 14 303
Points : 14 303
Salut,


ben en fait, ça n'a pas l'air de marcher

ce code :
me répond ceci :
Code :
interpret.fs:77:error: FS0039: The value, constructor, namespace or type 'find' is not defined.
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2008, 02h20   #6
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 946
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 946
Points : 1 085
Points : 1 085
J'avais oublié de répondre à ce message. En gros : chez moi, ça marche.

Le code suivant compile.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#light

module Environment = Hashtbl
module Environment =
    let create i = Hashtbl.create i

    let assign env (v : string) (val_expr : int) =
      try
        let _ = Hashtbl.find env v
        Hashtbl.replace env v val_expr 
      with Not_found ->
        Hashtbl.add env v val_expr;;

Environment.create |> ignore
Environment.find |> ignore
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2008, 09h05   #7
Rédacteur/Modérateur
 
Avatar de gorgonite
 
Homme Nicolas Vallée
Ingénieur Système
Inscription : décembre 2005
Messages : 9 774
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Vallée
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Ingénieur Système
Secteur : Transports

Informations forums :
Inscription : décembre 2005
Messages : 9 774
Points : 14 303
Points : 14 303
effectivement, ça marche avec F# 1.4.9.15 sous vista... mais çe ne marchait pas avec F# 1.3.*** sous Mono/Linux
__________________
Evitez les MP pour les questions techniques... il y a des forums
Contributions sur DVP : Mes Tutos | Mon Blog
gorgonite est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h32.


 
 
 
 
Partenaires

Hébergement Web