(define rearrange
(λ ignore
(define (proc1 x y) (+ x y))
(foldr (λ (x y) (if (list? x) (append (rearrange x y) y)
(if (procedure? x)
(append y (list x)) (cons x y)))) empty '(a proc1 b))))
为什么即使我在调用foldr之前将其定义为过程,也不会将x
识别为过程?
答案 0 :(得分:1)
不。在该列表中,and
不是一个过程。这是一个象征。
这是由于引用如何工作。表达式'(a b c)
实际上与(list 'a 'b 'c)
相同,因此and
字面上被评估为符号'and
。
明确使用list
函数制作列表,或使用quasiquoting。这些表达式中的任何一个都应该产生你想要的东西:
(list 'a and 'b)
`(a ,and b)