On Mon, 23 Mar 2020 01:45:40 -0700 (PDT), Yongming Shen
<[email protected]> wrote:

>Hi Matthew,
>
>Thank you for the quick reply!
>
>I tried the example you gave for my first question and it resulted in an 
>error.
>I have the following as `module-that-defines-fib`:
>
>  #lang racket
>  (provide fib)
>  (define fib "fib")
>
>And this is the error that I got (using Racket 7.6):
>
>  ; application: not a procedure;
>  ;  expected a procedure that can be applied to arguments
>  ;   given: "fib"
>  ; [,bt for context]


I've run into this problem before ... I don't recall the official
explanation, but my takeaway was that Racket does not permit you to
directly *export* a value - you have to export a function or macro
that produces the value.

E.g., 
  #lang racket
  (provide fib)
  (define (fib) "fib")


>I think this is because `(define-values (x) ...)` expands `...` without the 
>top-level-bind-scope, even when expand-context-to-parsed? is #t (according 
>to expander/expand/top.rkt). Is this a bug?
>Related to your answer to my second question, `define-syntaxes` similarly 
>does not add the top-level-bind-scope when expanding `...`. Does this mean 
>that even for `define-syntaxes`, `...` won't use the top-level-bind-scope 
>binding(s) after all?
>
>A little bit off-topic, in the definition of define-values (in 
>expander/expand/top.rkt), there is `(define-match m s ...)`, but for 
>define-syntaxes it is `(define-match m disarmed-s ...)`. Is this difference 
>significant? Or does define-match not care whether `s` or `disarmed-s` is 
>used?

I don't know the internals so I can't evaluate your theory.


>Thanks,
>Yongming

George

-- 
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/2l0i7flr0to9msl6sg165vptiec0qq26l7%404ax.com.

Reply via email to