Символы, указанные в схеме

Я не эксперт по схемам, поэтому не уверен, что использую здесь правильную терминологию. Пусть код говорит сам за себя:

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.

7
задан Alex Miller 22 July 2016 в 21:52
поделиться