IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Entier de Church


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut Entier de Church
    Bonjour je viens de débuter le langage CAML, c'est un peu difficile pour l'instant.

    Mon but est de définir une fonction qui prend un entier en argument et retourne l'entier de Church correspondant.

    ex : fonction 0 retourne x
    fonction 1 retourne f x
    fonction 2 retourne f(f x) ....


    Voici ce que j'ai fait( ça ne fonctionne pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let rec int2church n = 
               if (n = 0) then (fun f x -> x)
                else (fun f x -> int2church(n-1));;
    Voici l'erreur retournée :

    This expression has type int -> 'a -> int -> int,
    but is used with type int -> int.


    Merci de votre aide !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Par défaut
    Citation Envoyé par guipe Voir le message

    ex : fonction 0 retourne x
    fonction 1 retourne f x
    fonction 2 retourne f(f x) ....
    Essaye de donner une définition récursive en français d'abord, puis implémente la. C'est à dire "quelle est la définition au rang n en fonction de la définition au rang (n - 1)". Tu verras, ça passera tout seul

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    Au rang n ma fonction doit renvoyer f ^ n( f puissance n) x.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Par défaut
    Cherche une définition récursive, c'est à dire une définition où la valeur au rang n est défini au rang (n - 1).

    Si tu as des cours de caml, tu as du en voir un certain nombre. Par exemple on pourrait dire que

    x + 0 = x
    x + (n +1) = (x + n) + 1

    ou encore
    x * 0 = 0
    x * (n + 1) = (x * n) + x

    (premier exercice : passer ces définitions en caml)

    Tu vois dans les deux cas, il y a une partie de la définition qui est "complète" (la première ligne), c'est à dire que la définition de + 0 ne fait pas appelle à + et la définition de * 0 ne fait pas appelle à *. C'est ce qu'on appelle la condition d'arrêt.
    Il y a ensuite une partie de la définition qui est récursive, parce que la définition de + dépend de... la définition de + ! Ca pourrait paraitre bizarre, mais c'est "bien fondé" (comprendre "correct") parce que c'est la définition de + (n +1) qui dépend de la définition de + n. Donc par exemple la définition de +3 dépend de la définition de +2 qui dépend de celle de +1 qui dépend de celle de +0 qui... est bien définie ! Donc c'est bon.

    Maintenant, essaye d'écrire le même genre de définition pour "e2c" :

    e2c 0 f x = ??
    e2c (n + 1) f x = ??

    puis tu n'a plus qu'à traduire ça en caml !


    (PS: les lecteurs observateurs auront noté que dans la définition de +, il faut quand même être capable d'avoir le (+ 1). C'est l'opération "successeur" que l'ont suppose ici disponible)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Par défaut
    e2c 0 f x = x
    e2c (n + 1) f x = n f x * 1 f x

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 309
    Par défaut
    Citation Envoyé par guipe Voir le message
    e2c 0 f x = x
    e2c (n + 1) f x = n f x * 1 f x
    C'est bizarre, dans le cas n+1, ta définition de e2c ne dépend pas de e2c. Et essaye pour n = 0 et n = 1 par exemple, pour voir si ça correspond à ce que tu veux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [8086] Affichage d'un entier de 32 bits
    Par elNINIo dans le forum Assembleur
    Réponses: 12
    Dernier message: 10/05/2003, 20h33
  2. FormatFloat pour les entiers !?
    Par Lung dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2003, 15h20
  3. format entier
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/03/2003, 09h18
  4. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  5. Réponses: 4
    Dernier message: 05/06/2002, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo