[plt-scheme] preserving the lack of an inferred name
I can preserve a procedure's inferred name in a macro:
(define-syntax (keep-name stx)
(syntax-case stx ()
((_ x)
(with-syntax ((x (syntax-property #'x 'inferred-name (syntax-local-name))))
(syntax/loc stx
(let ((foo x))
(display (object-name foo))
(newline)
foo)))))
> (define x (keep-name (lambda () 1)))
x
The problem is if there is no inferred name, i.e. `syntax-local-name'
returns #f, the procedure will be named `foo':
> (keep-name (lambda () 1))
foo
#<procedure:foo>
Is there a way to keep the procedure unnamed, so that a name will be
constructed from its location like usual?
> (lambda () 1)
#<procedure:STDIN::1424>
--dougo at place.org