Libraries and Modules
35.1 R7RS Libraries
Library declarations: export, import, begin, include (load source from a file), include-ci, include-library-declarations, and cond-expand (feature-based conditional code).
Running with library paths: chibi-scheme -I . main.scm, guile -L . main.scm, csi -I . (with csc for libraries), scheme --libdirs . --script main.scm (Chez, R6RS).
;; file: geometry/shapes.sld (file naming conventions vary: .sld, .scm, directory = library name)
(define-library (geometry shapes)
(export make-circle circle? circle-area
(rename circle-radius radius)) ; export under a different name
(import (scheme base) (scheme inexact))
(begin
(define-record-type circle
(make-circle radius)
circle?
(radius circle-radius))
(define pi 3.141592653589793) ; not exported: private
(define (circle-area c) (* pi (square (circle-radius c))))));; main.scm
(import (scheme base) (scheme write)
(geometry shapes)
(only (srfi 1) fold iota) ; import only these
(prefix (srfi 69) ht:) ; ht:make-hash-table ...
(rename (scheme base) (car head))) ; rename on import
(display (circle-area (make-circle 2)))
(newline)(cond-expand
(chibi (import (chibi string)))
(guile (import (ice-9 string-fun)))
(else (begin (define (string-join lst sep) ...))))
(features) ; list of supported features35.2 R6RS Libraries
(library (geometry shapes)
(export make-circle circle-area)
(import (rnrs))
(define-record-type circle (fields radius))
(define (circle-area c) (* 3.14159 (circle-radius c) (circle-radius c))))35.3 Implementation Module Systems
;; Guile
(define-module (myapp utils)
#:use-module (srfi srfi-1)
#:export (double))
(define (double x) (* 2 x))
;; elsewhere: (use-modules (myapp utils))
;; CHICKEN
(module utils (double)
(import scheme)
(define (double x) (* 2 x)))