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

Langage Perl Discussion :

passer une fonction à une subroutine


Sujet :

Langage Perl

Vue hybride

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut passer une fonction à une subroutine
    Peut-on passer une subroutine à une subroutine.

    j'ai une subroutine fct1 définie par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub fct1 {
        my ( $x ) = @_ ;
        return 2 * $x + 1 ;
    }
    et une autre fct2 définie par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub fct2 {
        my ( $x ) = @_ ;
        return 3 * $y + 5 ;
    }

    je souhaite obtenir et
    en appelant une foction moyenne
    et
    Est-ce possible et comment ?

    Merci de votre aide.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Il faut jouer avec les références :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #!/usr/bin/perl
    use warnings;
    use strict;
     
     
    print moyenne(2,3,\&fct1);
     
    sub fct1 {
        my ( $x ) = @_ ;
        return 2 * $x + 1 ;
    }
     
    sub fct2 {
        my ( $y ) = @_ ;
        return 3 * $y + 5 ;
    }
     
    sub moyenne {
      my ($a, $b, $ref_fonction) = @_;
     
      return ( $ref_fonction->($a) + $ref_fonction->($b) ) / 2;
    }
    Voici une documentation sur les références et fermetures.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Par défaut
    Merci beaucoup Djibril


  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Exactement dans le même esprit que la solution de Djibril, il est possible d'utiliser des "fermetures" (closure en anglais), c'est à dire des fonctions anonymes dont on récupère une référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    my $fct1 = sub {
        my ( $x ) = @_ ;
        return 2 * $x + 1 ;
    }
     
    my $fct2 = sub {
        my ( $y ) = @_ ;
        return 3 * $y + 5 ;
    }
     
    sub moyenne {
      my ($a, $b, $ref_fonction) = @_;
     
      return ( $ref_fonction->($a) + $ref_fonction->($b) ) / 2;
    } 
     
    print moyenne(2, 3, $fct1);

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

Discussions similaires

  1. appliquer une fonction à une fonction
    Par stracoma dans le forum C++
    Réponses: 6
    Dernier message: 20/03/2015, 16h35
  2. Réponses: 0
    Dernier message: 17/02/2013, 20h27
  3. passer en paramettre d'une fonction une fonction
    Par RoM3Ro dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/06/2006, 15h54
  4. Passer une concaténation à une fonction ?
    Par Tittom dans le forum C
    Réponses: 10
    Dernier message: 11/05/2006, 17h43
  5. passer une variable d'une fonction à une autre
    Par Psyion dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/12/2005, 16h01

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