Ich verwende Simply Scheme in Dr. Racket.Anwendung Funktion über Baumknoten in Schema
Das Problem besteht darin, tree-map zu schreiben, analog zu deep-map, aber für Bäume, mit Datums- und Kinderselektoren. Dies ist tief-Karte:
(define (deep-map f structure)
(cond ((word? structure) (f structure))
((null? structure) '())
(else (cons (deep–map f (car structure))
(deep–map f (cdr structure))))))
Dies ist mein Versuch an den Baum-Karte so weit:
(define (tree-map f structure)
(cond ((leaf? structure)
(f (datum structure)))
(else
(cons (tree-map f (car (children structure)))
(tree-map f (cdr (children structure)))))))
Dies sind die Konstrukteure und Selektoren für den Baum:
(define (make-node datum children)
(cons datum children))
(define (datum node)
(car node))
(define (children node)
(cdr node))
(define (leaf datum)
(make-node datum '()))
(define (leaf? node)
(null? (children node)))
Für meine Testfall Ich verwende diesen Zahlenbaum mit einer Funktion, z. B. Quadrat:
(define number-tree
(make-node
'56
(list (make-node
'2
(children '(34 25 7 89)))
(make-node
'32
(list (make-node
'27
(children '(13 55 80)))
(make-node
'1098
(children '(45 785 98)))
(make-node '123 (children '(9046)))))
(make-node '23 (children '(1 9)))
(make-node '867
(children '(1 3 5 78)))
(make-node
'0
(list
(make-node '78 (children '(984)))
(make-node '45
(children '(23 46 78467)))
(make-node '3 (children '(2))))))))
Die Fehlermeldungen, die ich bekomme, sind Dinge wie 'cdr, Vertragsverletzung, erwartetes Paar'. Ich hatte bisher nicht zu viel Probleme damit, mit Listen in Scheme zu arbeiten - ich scheine sie zu bekommen. Aber das Übersetzen zu Bäumen verursacht mir ein Problem - es gibt etwas, was ich im Prinzip nicht verstehe, was bedeutet, dass ich diese listenbezogenen Fehlermeldungen bei Baumproblemen bekomme. Ich versuche, den abstrakten Typ (Baum und Knoten) zu verwenden, ohne über Listen nachzudenken. Gehe ich in der richtigen Weise? Jede Hilfe, um zu verstehen, was ich vermisse, um mit Bäumen gut zu arbeiten, wird sehr geschätzt.
Vielen Dank das war hilfreich. Tree-Map hat funktioniert. Es ist gut, den Fehler zu verstehen, den ich mit dem Nummernbaum gemacht habe. – Nufdriew