Small followup: we can do something like the following to let Racket
do most of the hard work.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; A little syntax to bind the name that Racket is inferring in the
surrounding context.
(define-syntax (with-inferred-name stx)
  (syntax-case stx ()
    [(_ id body)
     (let ([an-inferred-name (syntax-local-name)])
       #`(let ([id '#,an-inferred-name])
           body))]))

;; Now let's make another version of make-add-suffix-2 that
;; picks up the inferred name and uses it:
(define (make-add-suffix-2 a-proc-name s2)
  (procedure-rename (lambda (s) (string-append s s2))
                    a-proc-name))

;; We define stronger-2 by using with-inferred-name:
(define stronger-2
  (with-inferred-name proc-name
                      (make-add-suffix-2 proc-name "!")))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


This uses a small macro feature (syntax-local-name) to let the
compiler expose the name that Racket would use if it were in a
position to define a value.
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to