Scheme 为什么要退回这个?
我正在尝试使用lambda,但是当我在控制台中测试它时,它返回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 要测试它,必须拨打一个号码
我的代码是
(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))
,这是一个函数,而不是一个数字。(compcomp
的全部要点是组合两个函数来生成一个新函数。)是的,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