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 library
syntax 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
named foo.scm
, foo.ss
, foo.sls
or 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.scm
, .sagittarius.ss
, .sagittarius.sls
or
.sagittarius.sld
extensions. This functionality is implemented almost
all R6RS implementation. If you use R7RS style library syntax, then you can
also use cond-expand
to separate implementation specific
functionalities.
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.