No soy un experto en Scheme, así que no estoy seguro si estoy usando la terminología correcta aquí. Deje que el código hable por sí mismo:Símbolos citados en el Esquema
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)
Viniendo de fondo Clojure, pensé símbolos fueron utilizados como esto en el esquema, como palabras clave en Clojure. Se supone que debo pasar por una estructura de lista anidada y reemplazar símbolos con una llamada a función. Esta es mi solución unidimensional y que funciona:
(define (print-track track attrs)
(apply fmt #t
(map (lambda (attr)
(cond
((symbol? attr) (get-attr attr track))
(else attr)))
attrs)))
El espacio vacío por encima de la línea de (symbol?)
era para un (list?)
condicional, pero es probable que el abordaje equivocado.
Estoy usando Chicken Scheme.
+1 por claridad, minuciosidad – acfoltzer
Realmente no se puede escribir ninguna respuesta más clara que esta :) – progo