[plt-scheme] Newbie Schemer question

From: Paul Steckler (steck at ccs.neu.edu)
Date: Tue Nov 5 16:56:18 EST 2002

> I would like to execute a function that has one of its variable
> defined
> outside this function, in an upper context. Suppose that I define a
> simple
> function such as:
> (define (f n)
>   (+ *p* n))
> I would like to write something like that (the following syntax is
> incorrect):
> ((let ((*p* 1))
>   (lambda ()
>     (f 2)))
> How should I formulate this in Scheme?

Right, your suggestion won't work because the *p* introduced by the
let-binding is not in scope where f is defined.

How about:

  (define f
    (let ([*p* 1])
      (lambda (n) 
	  (+ *p* n))))

Since *p* is fixed, you could just inline its value:

  (define (f n)
    (+ 1 n))

which is more idiomatically written as

  (define f add1)

-- Paul

Posted on the users mailing list.