Я не эксперт по схемам, поэтому не уверен, что использую здесь правильную терминологию. Пусть код говорит сам за себя:
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)
Исходя из фона Clojure, я думал, что символы были используется в Scheme, как ключевые слова в Clojure. Я должен пройти через структуру вложенного списка и заменить символы вызовом функции. Это мое одномерное решение, и оно действительно работает:
(define (print-track track attrs)
(apply fmt #t
(map (lambda (attr)
(cond
((symbol? attr) (get-attr attr track))
(else attr)))
attrs)))
Пустое пространство над ] (символ?)
была для условного (списка?)
, но, вероятно, это неправильный подход.
Я использую Chicken Scheme.