在球拍中编程,我正在尝试编写一个接受单个整数的函数,并返回一个将该整数增加另一个整数的函数。例如:
((incnth 5) 3) --> 8
((incnth 3) -1) --> 2
不幸的是,我似乎仍然不了解 lambda 函数,因为我的代码一直说我的 lambda 不是函数定义。这是我写的。
(define (incnth n)
(lambda (f) (lambda (x) (+ n x))))
你lambda
比它需要的多一个。如果我理解正确,这个想法是有一个过程来创建用给定数字递增数字的过程。所以你应该这样做:
(define (incnth n) ; this is a procedure
(lambda (x) (+ n x))) ; that returns a lambda
返回的lambda
将“记住”该n
值:
(define inc2 (incnth 2))
并且可以像往常一样使用生成的过程,并获得预期的结果:
(inc2 40)
=> 42
((incnth 5) 3)
=> 8
((incnth 3) -1)
=> 2