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)))

Reply via email to