试图编写一个 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
在 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