方案:为什么我定义的程序没有被识别?
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)
(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)