Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Scheme
Scheme Forum d'entraide sur la programmation en langage fonctionnel Scheme
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/04/2011, 11h51   #1
debmaths
Candidat au titre de Membre du Club
 
MONTANERA
Inscription : 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 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 :
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 :
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 :
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))
debmaths est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 19h01   #2
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 434
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 434
Points : 5 298
Points : 5 298
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 : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h35   #3
debmaths
Candidat au titre de Membre du Club
 
MONTANERA
Inscription : 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 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 !!!!
debmaths est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 13h18   #4
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 434
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 434
Points : 5 298
Points : 5 298
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 : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 15h59   #5
debmaths
Candidat au titre de Membre du Club
 
MONTANERA
Inscription : janvier 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : MONTANERA

Informations forums :
Inscription : janvier 2011
Messages : 47
Points : 14
Points : 14
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"
debmaths est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 18h18   #6
debmaths
Candidat au titre de Membre du Club
 
MONTANERA
Inscription : janvier 2011
Messages : 47
Détails du profil
Informations personnelles :
Nom : MONTANERA

Informations forums :
Inscription : janvier 2011
Messages : 47
Points : 14
Points : 14
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
debmaths est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h33.


 
 
 
 
Partenaires

Hébergement Web