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 :

Passer une fonction en parametre


Sujet :

Caml

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Passer une fonction en parametre
    Bonjour,

    j'ai une fonction qui prend en parametre une autre fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let rec som f i n =
    	if i < n
    	then f (float_of_int(i)) +. som f (i + 1) n
    	else 1.0
    	;;
    val som : (float -> float) -> int -> int -> float = <fun>
    La fonction est le parametre 'f' (float -> float).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let integrale f a b =
    	...
    	let sub1 i = a +. float_of_int(i) *. h in
    	som sub1 1 3 (* erreur: sub1 est appele alors que je veux passer un pointeur sur fonction en parametre *)
    	...
    	;;
    Une idee pour passer 'sub1' a la fonction somme sans qu'elle soit appele ?
    J'espere que j'suis assez comprehensible

    Merci d'avance.

  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 concept de "pointeur sur fonction" en OCaml : une fonction est une valeur comme les autres.

    Ce que tu dis n'est effectivement pas très compréhensible : tu dis que sub1 "est appelée" alors que tu voudrais la passer en paramètre. Mais si tu la passes en paramètre à la fonction "som" (où elle a le nom "f"), il est normal qu'elle soit appelée à l'intérieur de "som", dans le cas où (i < n). C'est le cas ici puisque tu donnes comme paramètres 1 et 3 pour i et n.

    Je ne comprends donc pas très bien ce que tu veux. En regardant le nom de tes fonctions, il semble clair que tu veux approximer l'intégrale d'une fonction. J'ai donc l'impression que tu crois, ce qui est faux, que le nom "f" dans la définition de "som" et le nom "f" dans la définition de "integrale" désignent la même fonction. Ce n'est pas le cas : le f de som désigne la fonction qui tu as passée en paramètre à som, dans ton cas c'est "sub1", puisque tu as écrit (som sub1 1 3).

    Tu voulais peut-être plutôt écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    som (fun i -> f (sub1 i)) 1 3

  3. #3
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    Oui, c'est très important comme idée : en OCaml, une fonction se manipule comme n'importe quelle autre valeur. Raisonner comme on le ferait pour un autre langage (le C, par exemple) a toutes les chances de conduire à des erreurs ou, plus vicieusement, à des comportements étranges.

    Cordialement,
    Cacophrène

Discussions similaires

  1. Passer une fonction en parametre
    Par Invité dans le forum C
    Réponses: 4
    Dernier message: 30/12/2009, 15h24
  2. passer une classe comme parametre d'une fonction
    Par antoine dpt dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/07/2009, 13h10
  3. faire passer une fonction entant que parametre d'une fonction
    Par gali_fr dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/05/2008, 15h18
  4. passer une fonction dans un parametre d'une propriété de classe
    Par CAML dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 06/08/2006, 19h52
  5. Réponses: 12
    Dernier message: 25/01/2006, 07h29

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