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

Scheme Discussion :

Fonction interne et lettre "e"


Sujet :

Scheme

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 27
    Points
    27
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    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 : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 27
    Points
    27
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 27
    Points
    27
    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
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 27
    Points
    27
    Par défaut Problème e
    Citation Envoyé par Trap D Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

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