Dear Daniel, thank you for your answer, I have a sample code that I describe the same problem here in this thread (the last post of mine, you dont need to read the whole thread) including what command in which nested module I want to call:
https://groups.google.com/forum/?hl=en-GB#!topic/racket-users/4o1goSwrLHA About namespace and binding stuff, I'm completely lost (I'm an economics student). =.=~ On Sunday, 11 October 2015 11:54:58 UTC+2, daniel wrote: > Hi, > > I try to help and hope I do not mess things up. I found those start up > things a bit tricky as well. > > The main question is: What is available when you want to eval with the > -e option? (more technically: what bindings does your current namespace > provide at that point?) > > The concept of namespaces is explained here: > http://docs.racket-lang.org/guide/eval.html?q=namespace#%28tech._namespace%29 > > When you use the "-e" switch Racket requires racket/init. And > racket/init provides all bindings from racket (plus some more from > racket/enter and racket/help): > > ``` > (provide (all-from-out racket > racket/enter > racket/help)) > ``` > > That's described at http://docs.racket-lang.org/guide/racket.html and in > more detail in the reference at > http://docs.racket-lang.org/reference/running-sa.html#%28part._init-actions%29 > > If you use the "-f" switch to "load" a file you get a top-level > environment like in interaction mode with all the bindings from "racket". > > > But if you use module loading with -t (or other module loading switches) > that is simply not the case. Then the top-level environment contains no > bindings (not even the binding for function calls). > > > Given a file foo.rkt > > ``` > #lang racket > > (provide hello) > > (define (hello) > (display "Hello, world!\n")) > ``` > > even this call fails: > > $ racket -t foo.rkt -e '(+ 1 2)' > > (That's because not even the function calls are provided.) > > There are several ways to get your module "running": > > > You could provide a submodule `main` in your which is evaluated when > your module is required by the racket executable: > > Add > ``` > (module+ main > (hello) > ) > ``` > > and then "racket -t foo.rkt" prints "Hello, world!". > > > If you want to use "-e" (e.g. for testing) you need more bindings from > racket. You could require "racket" with -l: > > $ racket -t foo.rkt -l racket -e '(hello)' > > > Or your module could provide the bindings from racket. Then you could > add something like > > ``` > (provide (all-from-out racket) > ``` > > in the foo.rkt module. > > > To sum up: When using interactive or load mode you get the bindings from > racket, racket/init at the top-level environment. But if you use module > mode your top-level environment is empty in the beginning. > > > Kind regards, > Daniel > > > Am 10.10.2015 um 20:29 schrieb Linh Chi Nguyen: > > Hi everyone, > > The situation is that I have a racket file with the same code but 2 > > version, one in module and one in load mode. > > > > ``` > > hi.rkt is in load mode > > ``` > > > > ``` > > bye.rkt is the same code but in module mode > > > > #lang racket > > (provide run-some-commands) > > > > ``` > > > > Both work just fine if I use a REPL. > > > > The load mode: > > ``` > > ~@laptop$ racket > > Welcome to Racket v6 > >> (load "hi.rkt") > >> (run-some-commands x y z) > > ... > > ``` > > > > Or as a module > > ``` > > ~@laptop$ racket > > Welcome to Racket v6 > >> (require "bye.rkt") > >> (run-some-commands x y z) > > ... > > ``` > > > > Now the problem is when I want to run the command without loading a REPL. I > > follow this doc (http://docs.racket-lang.org/guide/racket.html), it works > > just fine if i use the load mode: > > > > ``` > > ~@laptop$ racket -f hi.rkt -e '(run-some-commands x y z)' > > ``` > > > > However, if i use the module mode, it says nothing, sometimes it says > > bye.rkt is undefined. > > > > ``` > > ~@laptop$ racket bye.rkt -e '(run-some-commands x y z)' > > ``` > > > > I'm very confused because Racket recommends to use module instead of load > > mode. > > > > Any help? > > > > Thank you, > > Chi > > -- 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 racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.