Scheme 为什么要退回这个?

Scheme 为什么要退回这个?,scheme,lisp,Scheme,Lisp,我正在尝试使用lambda,但是当我在控制台中测试它时,它返回 我的代码是 (define (comp f g) (lambda (x) (f (g x)))) 我的测试代码是 (comp (lambda (x) (+ x 1)) 3) 出于某种原因,lambda推迟了评估。有人能帮忙吗?comp接受两个函数参数并返回一个新函数-它们的 组成: (define (comp f g) (lambda (x) (f (g x)))) ;Value: comp 要测试它,必须拨打一个号码

我正在尝试使用lambda,但是当我在控制台中测试它时,它返回

我的代码是

(define (comp f g)
  (lambda (x) (f (g x))))
我的测试代码是

(comp (lambda (x) (+ x 1)) 3)

出于某种原因,lambda推迟了评估。有人能帮忙吗?

comp
接受两个函数参数并返回一个新函数-它们的 组成:

(define (comp f g)
  (lambda (x) (f (g x))))
;Value: comp
要测试它,必须拨打一个号码:


comp
接受两个参数和两个函数。您将传递一个数字作为第二个参数,因此我将其更改为{(comp(lambda(x)(+x1))(lambda(y)(+y2))},但它仍然返回过程。它不应该返回一个数字吗?
comp
生成
(lambda(x)(f(gx))
,这是一个函数,而不是一个数字。(comp
comp
的全部要点是组合两个函数来生成一个新函数。)是的,lambda延迟评估;它就是这样做的。
lambda
操作符将表达式包装到函数对象中。在调用该函数之前,不会对这些表达式求值。隐藏lambda是显式惰性求值运算符(如
delay
force
)的基础。如果调用它,返回的过程将爆炸,因为您用数字3组成了一个函数,而不是一个函数。也就是说,对于
comp
g
参数,您传递了
3
,但是
comp
返回的过程想要调用它:
(gx)
。即
(3 x)
((comp (lambda (x) (+ x 1))
       (lambda (x) (+ x 2)))
 3)
;Value: 6