On 05/14/2011 08:55 PM, Kazimir Majorinc wrote:
I want to write the function "counted" that generates closures in
Scheme; I want that after this

(define f (counted '(x) '(+ x x)))

f behaves like I wrote

(define f (let((i 0))
            (lambda(x) ;first argument
              (set! i (+ i 1))
              (display i)
              (+ x x)))) ;second argument

and to avoid symbols leaking which happens if I call

(define f (counted '(i) '(+ i i)))

How would you do that "idiomatically"?

Idiomatically, one would do this instead:

  (define (counted proc)
    (let ([i 0])
      (lambda args
        (set! i (+ i 1))
        (display i)
        (apply proc args))))

  (define f (counted (lambda (x) (+ x x))))

because symbols and lists do not adequately represent pieces of Racket programs. (See also Eli's macro solution.)

Ryan
_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to