BestInTOWN
BestInTOWN

Reputation: 33

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

Programming in racket, I am trying to write a function that takes a single integer, and returns a function that increments that integer by another integer. For example:

((incnth 5) 3) --> 8

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

Unfortunately I don't seem to understand lambda functions still, because my code keeps saying that my lambda is not a function definition. Here is what I wrote.

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

Upvotes: 0

Views: 293

Answers (1)

Óscar López
Óscar López

Reputation: 236150

You have one more lambda than it's needed. If I understand correctly, the idea is to have a procedure that creates procedures that increment a number with a given number. So you should do this:

(define (incnth n) ; this is a procedure
  (lambda (x) (+ n x))) ; that returns a lambda

The returned lambda will "remember" the n value:

(define inc2 (incnth 2))

And the resulting procedure can be used as usual, with the expected results:

(inc2 40)
=> 42
((incnth 5) 3)
=> 8
((incnth 3) -1)
=> 2

Upvotes: 1

Related Questions