I have read that in R7RS a library name is defined as: <library name> -> ( <library name part>+ ) <library name part> -> <identifier> | <uinteger 10> <uinteger R> -> <digit R> <digit 10> -> <digit> <digit> -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
That means that a valid library name would be something like (a b 1), where "1" is a valid library name part, but the following code disagrees. running `guile --r7rs -L . a/good-main.scm` works while `guile --r7rs -L . a/bad-main.scm` fails. The files are as follows: ;;; ./a/b/1.scm (define-library (a b 1) (import (scheme base)) (export one) (begin (define one 'one))) ;;; ./a/b/d-1.scm (define-library (a b d-1) (import (scheme base) (scheme write) ) (export dd-1) (begin (define dd-1 'dd-1))) ;;; ./a/b/d.scm (define-library (a b d) (import (scheme base) (scheme write) ) (export dd) (begin (define dd 'dd))) ;;; ./a/good-main.scm (define-library (a c) (import (scheme base) (scheme write) (a b d) (a b d-1)) (begin (display '(a c)) (newline) (display dd) (newline) (display dd-1) (newline))) ;;; ./a/bad-main.scm (define-library (a c) (import (scheme base) (scheme write) (a b 1)) (begin (display one) (newline)))