0

在球拍中编程,我正在尝试编写一个接受单个整数的函数,并返回一个将该整数增加另一个整数的函数。例如:

((incnth 5) 3) --> 8

((incnth 3) -1) --> 2

不幸的是,我似乎仍然不了解 lambda 函数,因为我的代码一直说我的 lambda 不是函数定义。这是我写的。

(define (incnth n)
  (lambda (f) (lambda (x) (+ n x))))
4

1 回答 1

1

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
于 2021-03-31T17:41:16.760 回答