2016-04-10 9 views
0

enter image description hereWie eine Funktion zu tun, die

Zum Beispiel in diesem Fall in einer Liste all den Baumes Zweig als String zurückgeben sollte es zurückgeben („casa“ „caso‚cal‘‚Cola‘‚Koma‘‚cena‘)

ich habe dies getan, versuchen Schwanz Rekursion zu verwenden.

(define (palabras-tree tree) 
    (palabras-tree-aux '() tree)) 

(define (palabras-tree-aux l tree) 
    (if (leaf? tree) 
     (cons (symbol->string (root tree)) l) 
     (cons (symbol->string(root tree)) 
      (fold-right append '() (map (lambda (t) 
              (string-append (symbol->string (root t))) 
              (palabras-tree-aux l t)) (children tree)))))) 

Aber es gibt diese: {} casaololamoena

Danke für die Hilfe

+0

Ist das Lisp? Wenn ja, sollten Sie es wahrscheinlich markieren. –

+0

Nein, es ist Schema. –

+0

Sorry, habe die Variante nicht erkannt. Mein Fehler, dass ich den Schema-Tag nicht selbst überprüft habe. –

Antwort

2

Hier ist eine mögliche Implementierung, ohne Endrekursion (mit DrRacket getestet):

(define (all-names tree) 
    (let ((first-char (symbol->string (root tree)))) 
    (if (leaf? tree) 
     (list first-char) 
     (map (lambda (el) (string-append first-char el)) 
      (append-map all-names (children tree)))))) 
+0

Ich habe diese Append-Map noch nie benutzt. Ich weiß Append und Map, aber nicht das. –

+0

'append-map' ist gleich' append * 'einer' map', und die letzte Form kann durch '(append * (map all-names (Kinderbaum))' 'ersetzt werden. 'append *' fügt alle Listen seines letzten Arguments zusammen, dh '(append * '(a)' (b) '((c) (d)))' returns' (a b c d) '. – Renzo

+0

Ich bin es gewohnt, es wie folgt zu verwenden: '(zerlegbare rechts append‚() (Karte alle Namen (Kinder Baum)) ' Dank –

Verwandte Themen