Даже если вы получили [конкретный] ответ, вот кое-что, что может помочь вам с подобными вопросами.
(define describe
(lambda (e)
(cond #;((list? e)
`(list ,@(map describe e)))
((pair? e)
`(cons ,(describe (car e))
,(describe (cdr e))))
((vector? e)
`(vector ,@(map describe (vector->list e))))
((or (null? e) (symbol? e)) `',e)
(else e))))
Эта процедура печатает код, который генерирует данный sexpr. Например:
> (describe '(a 2 b 3))
(cons 'a (cons 2 (cons 'b (cons 3 '()))))
Он также будет помещать кавычки, где это необходимо, поэтому он помещает их перед символами или (), но не перед цифрами. Если вам удобно использовать вложенные пары, вы можете удалить #;
в третьей строке, чтобы получить более компактный вывод:
> (describe '(a 2 b 3))
(list 'a 2 'b 3)
Этот код может научить вас многим вещам о цитате. Например:
> (describe ''''a)
(list 'quote (list 'quote (list 'quote 'a)))