Ich bin kein Scheme-Experte und daher nicht sicher, ob ich hier die richtige Terminologie verwende. Lassen Sie den Code für sich selbst sprechen:
CSI> (define tree '(1 2 3 'Symb 4 5 6))
#<unspecified>
CSI> tree
(1 2 3 (quote Symb) 4 5 6)
CSI> (symbol? 'Symb)
#t
CSI> (map symbol? tree)
(#f #f #f #f #f #f #f)
Da ich aus Clojure komme, dachte ich, dass Symbole in Scheme so verwendet werden, wie Schlüsselwörter in Clojure. Ich soll durch eine verschachtelte Listenstruktur gehen und Symbole durch einen Funktionsaufruf ersetzen. Dies ist meine eindimensionale Lösung und sie funktioniert:
(define (print-track track attrs)
(apply fmt #t
(map (lambda (attr)
(cond
((symbol? attr) (get-attr attr track))
(else attr)))
attrs)))
Der leere Raum oberhalb der (symbol?)
Linie war für eine (list?)
bedingt, aber es ist wahrscheinlich der falsche Ansatz.
Ich verwende Chicken Scheme.