Oops, just saw the discourse forum.  Moved to:

https://racket.discourse.group/t/let-over-lambda-and-source-location-information/306


Christine Lemmer-Webber <[email protected]> writes:

> Take the following code:
>
> #+BEGIN_SRC racket
> (require racket/match)
>
> (define-syntax-rule (methods* [(method-name method-args ...) body ...] ...
>                               fallback)
>   (let ((method-name
>          (lambda (method-args ...)
>            body ...)) ...)
>     (define all-methods (list (cons 'method-name method-name) ...))
>     (define method-dispatch
>       (make-keyword-procedure
>        (lambda (kw-args kw-vals method . args)
>          (match (assq method all-methods)
>            [(cons _name found-method)
>             found-method
>             #;(keyword-apply found-method kw-args kw-vals args)]
>            [#f
>             (keyword-apply fallback kw-args kw-vals method args)]))))
>     method-dispatch))
>
> (define no-such-method
>   (make-keyword-procedure
>    (lambda (kw-vals kw-args method . args)
>      (error "No such method" method))))
>
> (define-syntax-rule (methods method-defns ...)
>   (methods* method-defns ... no-such-method))
> #+END_SRC
>
>
> This is kind of a kluge, I know.  But you get the idea.  Let over
> lambda, because we're going to be reusing these procedures over and over
> again across multiple calls.
>
> Now let's say I instantiate this like:
>
> #+BEGIN_SRC racket
>   (define my-methods
>     (methods
>      [(double x)
>       (* x x)]))
> #+END_SRC
>
>> my-methods
> #<procedure:...tor-lib/methods.rkt:130:7>
>
> That's the line where method-dispatch is defined, *inside the macro*.
> But what I really want is for the annotation on the procedure to be
> *where my-methods is defined*.... not pointing back inside the macro.
>
> I have no idea how to do this.  Thoughts?

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/87lf16u1oo.fsf%40dustycloud.org.

Reply via email to