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 :

Affichage d'arbre et création de fonctions


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 Affichage d'arbre et création de fonctions
    J'ai copié sur le cours une fonction d'affichage et une définition d'arbre.
    J'ai écrit deux fonctions paragraphe et lignes. Ces deux fonctions pris indépendemment fonctionnent mais lorsque je les branche sur la fonction affichage je me plante. Impossible de trouver pourquoi, le trace ne me permets pas de voir l'erreur. Merci si vous pouvez encore m'aider.


    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
    ;;; lignes : Paragraphe -> LISTE[Ligne]
    ;;; (lignes paragraphe) rend la liste des lignes contenues dans
    ;;; le paragraphe donné
    ;;; fin de ligne \n
    (define (lignes paragraphe)
      (if (equal? paragraphe "")
          (list)
          (cons (extraire-prem-ligne 0 paragraphe "") (lignes (substring paragraphe (+ 1 (string-length (extraire-prem-ligne 0 paragraphe ""))) (string-length paragraphe))))))
    
    ;;; extraire-prem-ligne : Paragraphe * String -> Ligne
    ;;; (extraire-prem-ligne P acc) rend la première ligne du paragraphe
    ;;; P, sans le caractère de fin de ligne
    (define (extraire-prem-ligne n P acc)
      (if (or (= (string-length P) 0) (= n 1))
          acc
          (if (equal? (substring P 0 1) "\n")
            (extraire-prem-ligne 1 (substring P 1  (string-length P) ) acc)
            (extraire-prem-ligne 0 (substring P 1 (string-length P)) (string-append acc (substring P 0 1))))))
     
    
    (trace extraire-prem-ligne) (extraire-prem-ligne 0 "lig5\nlig6" "")
    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
    ;; paragraphe-cons : Ligne * Paragraphe -> Paragraphe
    ;;; (paragraphe-cons ligne para) rend le paragraphe dont la première 
    ;;; ligne est "ligne" et dont les lignes suivantes sont constituées par
    ;;; les lignes du paragraphe "para"
    (define (paragraphe-cons  ligne para)
        (if (= (string-length para) 0)
           (string-append ligne  para)   
           (string-append ligne "\n" para)))
        
    ;;; paragraphe : LISTE[Ligne] -> Paragraphe
    ;;; (paragraphe L) rend le paragraphe formé des lignes de la liste L
    
    (define (paragraphe L)
      (if (pair? L)
          (paragraphe-cons (car L) (paragraphe (cdr L)))
          ""))
    
    
    (trace paragraphe) (paragraphe (list "ligne1" "ligne2" "ligne3" "ligne4"))
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    ;;; ab-vide? : ArbreBinaire (alpha) -> bool
    ;;; (ab-vide? B) rend vrai ssi B est un arbre vide et faux sinon
    (define (ab-vide? B)
      (not (ab-noeud? B)))   ;;; ab-noeud? vrai si B non vide donc avec Not, vrai si vide
    
    (define (ab-feuille? B)                 ;;; vrai si B est une feuille
      (and (ab-noeud? B)                    ;;; B non vide
           (not (ab-noeud? (ab-gauche B)))  ;;; ab-gauche vide
           (not (ab-noeud? (ab-droit B))))) ;;; ab-droit vide
    
    
    (define (->string e)
       (cond ((number? e) (number->string e))
             ((symbol? e) (symbol->string e))
             (else e)))
    
    ;;; ab-B2 : -> ArbreBinaire (string)
    ;;; (ab-B2) rend l'arbre B2
    (define (ab-B2)
      (let* ((B1 (ab-noeud "f" (ab-vide) (ab-vide)))
             (B2 (ab-noeud "g" (ab-vide) (ab-vide)))
             (B1-1 (ab-noeud "c" (ab-vide) (ab-vide)))
             (B3 (ab-noeud "e" B2 (ab-vide)))
             (B4 (ab-noeud "d" B3 B1))
             (B5 (ab-noeud "b" B1-1 B4)))
        (ab-noeud "a" B5 (ab-vide))))
    
    
    (define (ab-affichage B)
      
      ;; add-tiret-prefixe : ligne ->Ligne
      ;; (add-tiret-prefixe ligne) rend la ligne obtenue en ajoutant un tiret devant "ligne"
      (define (add-tiret-prefixe ligne)
        (string-append "-" ligne))
      
      ;; expression de (ab-affichage B):
      (if (ab-vide? B)
          (paragraphe '("vide"))
          (paragraphe-cons
           (->string (ab-etiquette B))
           (paragraphe
            (map add-tiret-prefixe
                 (append (lignes (ab-affichage (ab-gauche B)))
                         (lignes (ab-affichage (ab-droit B)))))))))
    
    
    (trace ab-affichage) (ab-affichage (ab-B2))

  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
    Bonjour

    J'ai essayé de tester mais il manque le code de ab-noeud, ab-noeud? .
    "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 Lignes et paragraphe
    Citation Envoyé par Trap D Voir le message
    Bonjour

    J'ai essayé de tester mais il manque le code de ab-noeud, ab-noeud? .
    Je ne comprends pas votre remarque.
    "ab-noeud" est une fonction de Scheme !!!!

  4. #4
    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
    Pas dans le Scheme que j'utilise, PLT-Scheme, maintenant Racket.
    Par contre j'ai trouvé ce pdf qui pourrait vous intéresser, on y parle de la fonction ab-noeud.
    "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

  5. #5
    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
    Citation Envoyé par Trap D Voir le message
    Pas dans le Scheme que j'utilise, PLT-Scheme, maintenant Racket.
    Par contre j'ai trouvé ce pdf qui pourrait vous intéresser, on y parle de la fonction ab-noeud.
    OK merci j'emploie la version obligatoire V370. Pour ab-noeud j'ai compris: je prenais cette fonction comme reconnaisseur et non comme constructeur !!! Grosse erreur de ma part. Par contre je m'excrime à faire tourner sans résultat la fonction "lignes"

  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
    Citation Envoyé par debmaths Voir le message
    OK merci j'emploie la version obligatoire V370. Pour ab-noeud j'ai compris: je prenais cette fonction comme reconnaisseur et non comme constructeur !!! Grosse erreur de ma part. Par contre je m'excrime à faire tourner sans résultat la fonction "lignes"
    ERREUR V372

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

Discussions similaires

  1. [MySQL] Création de fonction pour affichage numéro de téléphones
    Par ripout dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 03/01/2011, 15h22
  2. Création de fonction
    Par benazerty dans le forum Access
    Réponses: 6
    Dernier message: 14/04/2006, 10h40
  3. Réponses: 5
    Dernier message: 30/03/2006, 14h52
  4. [Graphique] affichage d'arbres n-aires
    Par jeepnc dans le forum Graphisme
    Réponses: 2
    Dernier message: 21/03/2006, 21h27
  5. Affichage d'un vector dans une fonction
    Par jamesleouf dans le forum SL & STL
    Réponses: 1
    Dernier message: 16/03/2006, 19h05

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