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 :

pourquoi une fonction incorrecte renvoie-t-elle un résultat ?


Sujet :

Caml

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut pourquoi une fonction incorrecte renvoie-t-elle un résultat ?
    après la définition

    let rec h x = h x;;

    et l'utilisation

    h 1;;

    j'attends un message 'pile pleine'
    or la boucle read eval print répond

    # h 1;;

    et l'interpréteur ne rend pas la main
    je ne comprends pas ce comportement, quelqu'un peut-il me l'expliquer ?

    merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Il n'y a pas de message "pile pleine" car ta fonction est tail-récursive (elle se rappelle en faisant un tail-call, c'est à dire un appel qui est la dernière opération de la fonction). Caml l'optimise en faisant un appel tail-récursif, qui ne fait pas grandir la pile. La pile reste donc constante et ton code boucle à l'infini.

    Si tu veux dépasser la pile, il faut empêcher la tail-rec (en faisant de l'appel terminal une opération intermédiaire, et pas l'opération finale) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let rec h x = let y = h x in y

  3. #3
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Ta fonction est éta-équivalente à :
    Code OCaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # let rec h = h;;
    Characters 12-13:
      let rec h = h;;
                  ^
    Error: This kind of expression is not allowed as right-hand side of `let rec'

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/10/2007, 10h37
  2. Réponses: 5
    Dernier message: 25/09/2006, 12h06
  3. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 02h04
  4. [9i] PLS-00320 avec une fonction qui renvoi un curseur
    Par hoaxpunk dans le forum Oracle
    Réponses: 5
    Dernier message: 09/02/2006, 18h04
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 01h13

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