Hello Hans-Werner Roitzsch, It looks like you’re mixing up two concepts: the fac creates a module and loads the fact which is not a module, so basically main and choose live in another namespace than fact (define-module starts a new namespace). And it seems that this is indeed a bug in the documentation, because https://www.gnu.org/software/guile/manual/html_node/Scripting-Examples.html#Scripting-Examples jumps to defining fac as a module but does not at the same time define and import fact as a module, too. Hans-Werner Roitzsch writes: > I have the file `modules.scm` with the following code: > > ----8<----start-of-code---->8---- > #!/usr/bin/env sh > exec guile -l fact.scm -e '(@ (my-module) main)' -s "$0" "$@" > !# > > ;; Explanation: > ;; -e (my-module) > ;; If run as a script run the `my-module` module's `main`. > ;; (Use `@@` to reference not exported procedures.) > ;; -s > ;; Run the script. > > (define-module (my-module) > #:export (main)) At this point you need (use-modules (fact)) > ;; Create a module named `fac`. > ;; Export the `main` procedure as part of `fac`. > > (define (n-choose-k n k) > (/ (fact n) > (* (fact k) > (fact (- n k))))) > > (define (main args) > (let ((n (string->number (cadr args))) > (k (string->number (caddr args)))) > (display (n-choose-k n k)) > (newline))) > ----8<----end-of-code---->8---- > > And I have the following `fact.scm`: > > ----8<----start-of-code---->8---- > #!/usr/local/bin/guile \ > -e main -s > !# > > ;; How to run this program? > ;; Example: > ;; guile -e main -s factorial-script.scm 50 > ;; Explanation: > ;; -e specifies the procedure to run > ;; -s specifies to run this as a script > ;; 50 is the number we take as input to the script To be usable as module, this needs to be defined as module: (define-module (fact) #:export (fact)) > (define (fact n) > (if (zero? n) 1 > (* n (fact (- n 1))))) > > (define (main args) > (display (fact (string->number (cadr args)))) > (newline)) > ----8<----end-of-code---->8---- … > chmod +x modules.scm > ./modules.scm 10 3 Does it work with the added module definition and import? If yes, then this looks like a bug in the documentation. > Best regards, > > Hans-Werner Roitzsch Best wishes, and thank you for reporting! Arne -- Unpolitisch sein heißt politisch sein ohne es zu merken