Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Candidat au titre de Membre du Club
    Profil pro MONTANERA
    Inscrit en
    janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Nom : MONTANERA

    Informations forums :
    Inscription : janvier 2011
    Messages : 47
    Points : 14
    Points
    14

    Par défaut Fonction interne et lettre "e"

    Bonjour,

    C'est encore moi, désolé.
    Pouvez-vous m'expliquer la fonction du "e" ? il remplace (cdr L). Comment la multiplication (car L)* (cdr L) peut-elle s'effectuer ? Je n'ai aucune explication de cela dans mes documents. Merci d'avance.

    Code :
    1
    2
    3
    4
    5
    define (mult L1)
      (define (mult-elem e)
        (* (car L1) e))
      (map mult-elem (cdr L1)))
    (trace mult) (mult (list 2 3 4 5))

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 517
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 517
    Points : 5 408
    Points
    5 408

    Par défaut

    map envoie un par un les éléments de (cdr L1) à la fonction mult-elem et récupère donc en retour la liste des éléments de (cdr L1) multiplié par le premier élément de L1 c'est-à-dire 2.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi

  3. #3
    Candidat au titre de Membre du Club
    Profil pro MONTANERA
    Inscrit en
    janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Nom : MONTANERA

    Informations forums :
    Inscription : janvier 2011
    Messages : 47
    Points : 14
    Points
    14

    Par défaut Problème e

    Citation Envoyé par Trap D Voir le message
    map envoie un par un les éléments de (cdr L1) à la fonction mult-elem et récupère donc en retour la liste des éléments de (cdr L1) multiplié par le premier élément de L1 c'est-à-dire 2.
    Merci bien, j'avais bien interprété. Mais je ne comprends pas que l'on puisse passer d'une liste ( cdr L) à un caractère ( e ). Quand peut-on employer cette procédure ?

  4. #4
    Candidat au titre de Membre du Club
    Profil pro MONTANERA
    Inscrit en
    janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Nom : MONTANERA

    Informations forums :
    Inscription : janvier 2011
    Messages : 47
    Points : 14
    Points
    14

    Par défaut Problème e

    Citation Envoyé par debmaths Voir le message
    Merci bien, j'avais bien interprété. Mais je ne comprends pas que l'on puisse passer d'une liste ( cdr L) à un caractère ( e ). Quand peut-on employer cette procédure ?
    Pour tester j'ai remplacé e par (cadr L1). Je n'y comprends plus rien: la fonction map ne déroule plus L1 (il me semble). J'obtiens 6 en constante !!!
    Dans mult-elem, (car L1) garde la même position alors que e évolue dans la liste, pourquoi ?

    define (mult L1)
    (define (mult-elem e)
    (* (car L1) (cadr L1)))
    (map mult-elem (cdr L1)))
    (trace mult) (mult (list 2 3 4 5))

    Merci pour votre aide


  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Inscrit en
    septembre 2003
    Messages
    4 517
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 4 517
    Points : 5 408
    Points
    5 408

    Par défaut

    Code :
    1
    2
    3
    4
    5
    define (mult L1)
      (define (mult-elem e)
        (* (car L1) e))
      (map mult-elem (cdr L1)))
    (trace mult) (mult (list 2 3 4 5))
    Code :
    Dans mult-elem, (car L1) garde la même position alors que e évolue dans la liste, pourquoi ?
    L1 est extérieur à la fonction mult-elem donc (car L1) garde toujours la meme valeur pendant le déroulement de mult-elem.
    e est local à mult-elem, c'est l'argument passé à mult-elem par map, donc au premier tour c'est 3, ensuite 4 puis 5 qui sont multipliés successivement par 2 d'où le résultat (6 8 10).
    Code :
    1
    2
    3
    4
    5
    (define (mult L1)
      (define (mult-elem e)
       (* (car L1) (cadr L1)))
      (map mult-elem (cdr L1)))
    (trace mult) (mult (list 2 3 4 5))
    ic c'est différent, je rappelle que L1 étant définie hors du corps de mult-elem, (car L1) et (cadr L1) gardent toujours la même valeur.
    mul-elem est appelée 3 fois avec successivement comme valeur pour e 3, 4, 5. (cette valeur n'est pas utilisée remarquez-le).
    Il y a 3 appels à mult-elem, à chaque fois on multiplie (car L1) par (cadr L1) donc 2 par 3 et on obtient bien 3 fois de suite 6.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : Intérieur avec jeune femme de Vilhelm Hammershoi

  6. #6
    Candidat au titre de Membre du Club
    Profil pro MONTANERA
    Inscrit en
    janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Nom : MONTANERA

    Informations forums :
    Inscription : janvier 2011
    Messages : 47
    Points : 14
    Points
    14

    Par défaut Problème e

    Citation Envoyé par Trap D Voir le message
    Code :
    1
    2
    3
    4
    5
    define (mult L1)
      (define (mult-elem e)
        (* (car L1) e))
      (map mult-elem (cdr L1)))
    (trace mult) (mult (list 2 3 4 5))
    Code :
    Dans mult-elem, (car L1) garde la même position alors que e évolue dans la liste, pourquoi ?
    L1 est extérieur à la fonction mult-elem donc (car L1) garde toujours la meme valeur pendant le déroulement de mult-elem.
    e est local à mult-elem, c'est l'argument passé à mult-elem par map, donc au premier tour c'est 3, ensuite 4 puis 5 qui sont multipliés successivement par 2 d'où le résultat (6 8 10).
    Code :
    1
    2
    3
    4
    5
    (define (mult L1)
      (define (mult-elem e)
       (* (car L1) (cadr L1)))
      (map mult-elem (cdr L1)))
    (trace mult) (mult (list 2 3 4 5))
    ic c'est différent, je rappelle que L1 étant définie hors du corps de mult-elem, (car L1) et (cadr L1) gardent toujours la même valeur.
    D'accord mais je tourne en rond, pourquoi alors e peut-il varier ?mul-elem est appelée 3 fois avec successivement comme valeur pour e 3, 4, 5. (cette valeur n'est pas utilisée remarquez-le).
    Il y a 3 appels à mult-elem, à chaque fois on multiplie (car L1) par (cadr L1) donc 2 par 3 et on obtient bien 3 fois de suite 6.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •