方案:为什么我定义的程序没有被识别?

Scheme: Why isn't my defined procedure being recognized?

(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))))

为什么 x 没有被识别为一个过程,即使我在调用 foldr 之前就这样定义了它?

没有。在该列表中,and 不是过程。是一个符号。

这是由于引用的工作原理。表达式 '(a b c) 实际上与 (list 'a 'b 'c) 相同,因此 and 按字面意思计算为符号 'and.

要么明确使用 list 函数来制作列表,要么使用准引用。这些表达式中的任何一个都应该产生你想要的结果:

(list 'a and 'b)
`(a ,and b)