Sagittarius provides 2 styles to write a library, one is R6RS style and other one is R7RS style. Both styles are processed the same and users can use it without losing code portability.
Following example is written in R6RS style, for the detail of
librarysyntax please see the R6RS document described in bellow sections.
(library (foo) (export bar) (import (rnrs)) (define bar 'bar) )
The library named
(foo) must be saved the file
foo.sld (I use
.scm for all examples) and located on the loading path, the value is
returned by calling
add-load-path with 0 length string.
If you want to write portable code yet want to use Sagittarius specific
functionality, then you can write implementation specific code separately using
.sagittarius.sld extensions. This functionality is implemented almost
all R6RS implementation. If you use R7RS style library syntax, then you can
cond-expand to separate implementation specific
If you don't want to share a library but only used in specific one, you can write both in one file and name the file you want to show. For example;
(library (not showing) ;; exports all internal use procedures (export ...) (import (rnrs)) ;; write procedures ... ) (library (shared) (export shared-procedure ...) (import (rnrs) (not showing)) ;; write shared procedures here )
Above script must be saved the file named
shared.scm. The order of
libraries are important. Top most dependency must be the first and next is
second most, so on.
Note: This style can hide some private procedures however if you want to write portable code, some implementations do not allow you to write this style.