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 :

Utilisation de Reduce


Sujet :

Scheme

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut Utilisation de Reduce
    bonjour a tous...

    je me retrouve avec un devoir maison a faire que je pensée avoir compris..

    voici les 2 exercices ou je bloque..

    En utilisant reduce, donner une definition de somme-carres
    tq : (somme-carres (1 2 3 4 5)) --> 55 (soit 5²+4²+3²+2²+1²)


    Ma solution :

    (define (somme-carres L)
    (if (pair? L)
    (if (pair? (cdr L))
    (reduce + (* (car L) (car L)) (cdr L))
    (list))
    (list)))

    (somme-carres (1 2 3 4 5)
    ceci me renvoie 15 mais pourquoi ?


    2) question.... Toujours avec REDUCE

    sans reduce je trouve les deux fonctions mais lorsque j'integre Redruce rien ne marche !!!

    nombre-occurences, qui a pour specification

    nombre-occurences : [Valeur] * LISTE [Valeur] --> INT

    c'est a dire exemple :
    (nbre-occurence 2 (list 5 7 8 9)) -> 0
    (nbre-occurence 3 (list)) -> ( )
    (nbre-occurence 3 (list 1 2 3 4 5)) -> 1
    (nbre-occurence "ma" (list 1 2 3 "ma" 3 "me" 4 "ma")) -> 2


    ma solution est :

    (define (nbre-oc e L)
    ;;; (compte-e x n) rend (n + 1) si x = e sinon n
    (define (compte-e x n)
    + (if (equal? x e) 1 0) n)
    (reduce compte-e 0 L))

    ceci me renvoi
    (nbre-occurence 2 (list 5 7 8 9)) -> 0
    (nbre-occurence 3 (list)) -> 0
    (nbre-occurence 3 (list 1 2 3 4 5)) -> 0
    (nbre-occurence "ma" (list 1 2 3 "ma" 3 "me" 4 "ma")) -> 0

    Ou est le probleme a nouveau ??


    merci a tous....

  2. #2
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    T'es dans la même classe que bugmenot? Et pour ton premier problème tu fais ça vraiment trop compliqué. Je ne vais pas te donner la réponse, mais un appel simple à reduce fait l'affaire, pas besoin de faire une fonction complète.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Par défaut
    Citation Envoyé par GnuVince Voir le message
    T'es dans la même classe que bugmenot? Et pour ton premier problème tu fais ça vraiment trop compliqué. Je ne vais pas te donner la réponse, mais un appel simple à reduce fait l'affaire, pas besoin de faire une fonction complète.

    ok donc


    (define ( somme-carres x L)
    (reduce + ( * (car L) (car L)) (somme-carres (cdr L))))

    ceci est bon ?

    je suis en panne de pc, donc je n'ai plus le logiciel drscheme...

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par mrc10 Voir le message
    ok donc


    (define ( somme-carres x L)
    (reduce + ( * (car L) (car L)) (somme-carres (cdr L))))

    ceci est bon ?

    je suis en panne de pc, donc je n'ai plus le logiciel drscheme...
    Ennuyeux pour programmer -_-

    Sinon pourquoi ne pas avoir utilisé le sujet déjà créé ?

  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
    Par défaut
    Citation Envoyé par mrc10 Voir le message
    ok donc


    (define ( somme-carres x L)
    (reduce + ( * (car L) (car L)) (somme-carres (cdr L))))

    ceci est bon ?

    je suis en panne de pc, donc je n'ai plus le logiciel drscheme...
    Si j'ai bien compris, l'intérêt de reduce est de supprimer la récursivité, ce qui n'est pas le cas ici.
    Regarde cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    (define (somme-des-doubles l)
      (reduce (lambda (x y) 
                (begin
                  (display (list 'nombre 'x x)) (newline)
                  (display (list 'nombre 'y y)) (newline)
                  (+ (* 2 x) y))) 0 l))
    Sortie
    > (somme-des-doubles (list 0 1 2 3 4 5))
    (nombre x 1)
    (nombre y 0)
    (nombre x 2)
    (nombre y 2)
    (nombre x 3)
    (nombre y 6)
    (nombre x 4)
    (nombre y 12)
    (nombre x 5)
    (nombre y 20)
    30
    > (somme-des-doubles (list 1 2 3 4 5))
    (nombre x 2)
    (nombre y 1)
    (nombre x 3)
    (nombre y 5)
    (nombre x 4)
    (nombre y 11)
    (nombre x 5)
    (nombre y 19)
    29
    >
    Reduce permet d'appliquer itérativement la fonction sur les éléments de la liste, elle les ajoute les résultats (ici le double du nombre x) à un accumulateur initialisé à la première valeur de la liste, cet accumulateur étant affiché en fin de liste.
    "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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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