试图编写一个 returns 另一个函数的函数,但 Racket 说我的 lambda 不是函数定义?

Trying to write a function that returns another function, but Racket says my lambda is not a function definition?

在 racket 中编程,我正在尝试编写一个接受单个整数的函数,以及 returns 一个将该整数递增另一个整数的函数。例如:

((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