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

时间:2015-02-15 22:04:21

标签: scheme

(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识别为过程?

1 个答案:

答案 0 :(得分:1)

不。在该列表中,and不是一个过程。这是一个象征。

这是由于引用如何工作。表达式'(a b c)实际上与(list 'a 'b 'c)相同,因此and字面上被评估为符号'and

明确使用list函数制作列表,或使用quasiquoting。这些表达式中的任何一个都应该产生你想要的东西:

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