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 :

Syntaxe avec un if et de la récursivité


Sujet :

Scheme

  1. #21
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ton "on affiche" est suspect, que veux-tu que la fonction renvoie ?
    Par ailleurs ton let ne sert à rien (le binding n'est utilisé qu'une seule fois), tu n'as besoin que d'un seul if, ton appel récursif à base est incorrect (tu ne devrais pas l'appeler sur n - m, mais bien sur m)...

    Commence par essayer de retourner la liste des digits du nombre binaire correspondant à n, dans l'ordre inverse, c'est le plus facile à faire.

    --
    Jedaï

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Par ailleurs ton let ne sert à rien (le binding n'est utilisé qu'une seule fois) [...]
    Menfinbon ce n'est pas un bon argument.
    Ça pourrait augmenter la lisibilité de faire une liaison (en français )

    Citation Envoyé par Maxence45 Voir le message
    juste une question là et ça me permettra d'avancer : je dois me taper combien de if pour traduire mon algo en scheme ?
    Quand tu as plusieurs « if » imbriqués comme tu étais partie pour en faire, préfères le « cond »
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (if (= n 1) 
        a
        (if (> n 1)
            b
            c
         )
     )
    s'écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (cond ((= n 1) a)
          ((> n 1) b)
          (else c)
     )
    Personnellement j'utilise les [] pour les tests (ça me rappelle le BASH) ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (cond ([= n 1] a)
          ([> n 1] b)
          (else c)
     )

  3. #23
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    je ne sais pas changer ça je suis désolée j'ai besoin de plus d'aide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (define (base n)
      (if (= n 0)
          0
          (base (quotient (/ n 2)))
          (if (= (modulo (/ n 2)) 0)
              1
              0)
          )
      )
    l'idée est bonne je pense mais c'est tjs ce probleme des if ...

    si n = 0 , on renvoit 0 , jusque là c'est bon

    sinon , on lance la fonction récursive , ici donc
    (base (quotient (/ n 2)))

    et si le modulo vaut 0 on renvoit 1 , sinon on renvoit 0 , quelqu'un peut il me corriger mon code juste sur les if car je n'y arrive pas .
    En français je dois juste traduire :

    Si n = 0 , on affiche 0
    sinon on lance la définition récursive , et dans cet appel ,
    si modulo de n par 2 vaut 0 on affiche 1
    sinon on affiche 0 .


    J'arrive pas à le traduire en scheme .

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    voici la soluce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    (define (display-as-binary n)
      (cond
        ((<= n 1) (display 1))
        ((odd? n) (display-as-binary (/ (- n 1) 2)) (display 1))
        ((even? n) (display-as-binary (/ n 2)) (display 0) )))
    
    (display-as-binary 8)
    Ciao

  5. #25
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    je suis débutante depuis 1 semaine , je n'ai pas le droit d'utiliser les fonctions sur tu m'as donné .

  6. #26
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    quelles fonction peut tu emploier alors?

    se sont de bêtes fonctions ici regardé si le chiffre est zero si il est pair ou impair et si oui tu "display" montre le chiffre 1 ou 0.

  7. #27
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    quotient et modulo et j'ai déjà affiché un code 2 messages au dessus , je pense juste qu'il a besoin d'une petite correction dans les if pour qu'il marche , qu'en penses tu ?

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    ton syntax est très mauvais
    tu emploie 4 partie dans ton if
    le if en contient 3
    donc je texplique
    tu as un (if
    ( et puis la condition)
    (si la condition est vraie tu fait ceci)
    (autrement ceci)

    essaie le cond a place de if et le modula a besion de 2 arguments

  9. #29
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    regarde ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (define (base n)
      (cond ((= n 0) 0)
            (
    comment t'écris ensuite dans le cond que si quotient n 2 > 0 ET modulo n 2 égal à 0 alors on affiche 1 ?

  10. #30
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    par ailleurs j'en perds toute ma récurisivité je comprends plus rien

  11. #31
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    je veux rester avec mes if et partir de ce code que j'ai fait sinon j'aurais jamais fini , qui peut me le corriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (define (base n)
      (if (= n 0)
          0
          (base (quotient (/ n 2)))
          (if (= (modulo (/ n 2)) 0)
              1
              0)
          )
      )
    je veux juste qu'on me corrige le if car je n'y arrive pas du tout , là au moins j'ai bien une récursion .

  12. #32
    Membre éclairé
    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
    Points : 803
    Points
    803
    Par défaut
    C'est supposé faire quoi ta fonction base? Et garde des parenthèses fermantes sur la même ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ;; mauvais style
    (define (foo x)
      (if (> x 10)
          (bar x)
          (baz x)
      )
    )
    
    ;; bon style
    (define (foo x)
      (if (> x 10)
          (bar x)
          (baz x)))

  13. #33
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    ma fonction est supposée transformer un nombre décimal en binaire , si j'ai 12 ça doit m'afficher 1100

  14. #34
    Membre éclairé
    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
    Points : 803
    Points
    803
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (define (base n)
      (define (base-aux n acc)
        (if (zero? n)
            acc
            (if (= (remainder n 2) 0)
                (base-aux (quotient n 2) (cons 0 acc))
                (base-aux (quotient n 2) (cons 1 acc)))))
      (base-aux n '()))

  15. #35
    Débutant
    Profil pro
    Inscrit en
    Février 2007
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 450
    Points : 107
    Points
    107
    Par défaut
    non ce sont des fonctions qui me sont interdites , j'ai posté le message ailleurs , seules fonctions autorisées , quotient et modulo . NE PLUS REPONDRE ICI , merci .

  16. #36
    Membre éclairé
    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
    Points : 803
    Points
    803
    Par défaut
    Si t'as pas moyen de mettre les chiffres ensemble, tu seras pas capable de régler ce problème là.

  17. #37
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    esque c'est un exercice de quelque part car je ne croit pas que se soit possible avec le modulo
    pour lecrire en binaire tu dois d'abord voir si ton chiffre er pair ou impair si ou tu dois diviser le prochain par 2 ...
    esque lexercice est ecrit qq part ?

  18. #38
    Membre éclairé
    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
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par Nodoso Voir le message
    esque c'est un exercice de quelque part car je ne croit pas que se soit possible avec le modulo
    pour lecrire en binaire tu dois d'abord voir si ton chiffre er pair ou impair si ou tu dois diviser le prochain par 2 ...
    esque lexercice est ecrit qq part ?
    Oui tu peux avec modulo (si ça fait la même chose que remainder). Copie mon code et essaye (base 15)

Discussions similaires

  1. Erreur de syntaxe avec UPDATE
    Par tyarak dans le forum Requêtes
    Réponses: 3
    Dernier message: 01/02/2006, 01h18
  2. pb de syntaxe avec le "select"
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 04/01/2006, 15h40
  3. syntaxe avec un if
    Par cubepiege dans le forum Langage SQL
    Réponses: 17
    Dernier message: 07/11/2005, 18h41
  4. [Tableaux] simple syntaxe avec $_REQUEST
    Par nicerico dans le forum Langage
    Réponses: 3
    Dernier message: 18/10/2005, 16h01
  5. [langage] Pb de syntaxe avec GOTO
    Par BEAUJAULT dans le forum Langage
    Réponses: 2
    Dernier message: 14/10/2004, 16h02

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