That's precisely the behavior you want: 
 -- what's exported is the public name, which would usually check/do things 
before it calls private 
 -- while the unprotected private one is not provided and should not be 
visilble. 

How does the mechanics work? Well it delivers path names to these private 
identifier that in principle you can find too. So you can get around 
provided/not-provided but you don't want to 

-- Matthias






On Feb 26, 2014, at 11:51 AM, Matthew Butterick <[email protected]> wrote:

> In this example, why can syntax produced via macro reach the private 
> function, while the ordinary syntax cannot?
> 
> 
> ;;;;;;;;;;;;;;;;;;;;;;;;
> ;; one.rkt
> #lang racket/base
> 
> (provide public-proc)
> 
> (define (private-proc x)
>  (format "The private proc says ~a" x))
> 
> (define-syntax-rule (public-proc x)
>  (private-proc x))
> ;;;;;;;;;;;;;;;;;;;;;;;;
> 
> ;;;;;;;;;;;;;;;;;;;;;;;;
> ;; two.rkt
> #lang racket/base
> (require "one.rkt")
> ;;;;;;;;;;;;;;;;;;;;;;;;
> 
> Running two.rkt:
>> (public-proc 'hi)
> "The private proc says hi"
>> (private-proc 'hi)
> private-proc: undefined
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to