diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:34 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2017-02-20 00:05:34 -0800 |
commit | 237c6e380aebdcbc70bd1c9ecf7d3f6effca2752 (patch) | |
tree | 9832fbdd6fbeedf3fc7f0e7923fe20b7d35b1499 | |
parent | 5145dd3aa0c02c9fc496d1432fc4410674206e1d (diff) | |
download | slib-2063ddeec7dce50b4662cdea3c3f1d7631722607.tar.gz slib-2063ddeec7dce50b4662cdea3c3f1d7631722607.zip |
Import Upstream version 3a3upstream/3a3
-rw-r--r-- | ANNOUNCE | 155 | ||||
-rw-r--r-- | ChangeLog | 113 | ||||
-rw-r--r-- | DrScheme.init | 30 | ||||
-rw-r--r-- | FAQ | 4 | ||||
-rw-r--r-- | Makefile | 22 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | RScheme.init | 42 | ||||
-rw-r--r-- | STk.init | 30 | ||||
-rw-r--r-- | Template.scm | 44 | ||||
-rw-r--r-- | alistab.scm | 2 | ||||
-rw-r--r-- | batch.scm | 8 | ||||
-rw-r--r-- | bigloo.init | 38 | ||||
-rw-r--r-- | bytenumb.scm | 45 | ||||
-rw-r--r-- | bytenumb.txi | 25 | ||||
-rw-r--r-- | chez.init | 36 | ||||
-rw-r--r-- | db2html.scm | 2 | ||||
-rw-r--r-- | dirs.scm | 16 | ||||
-rw-r--r-- | elk.init | 42 | ||||
-rw-r--r-- | gambit.init | 58 | ||||
-rw-r--r-- | grapheps.scm | 53 | ||||
-rw-r--r-- | grapheps.txi | 5 | ||||
-rw-r--r-- | guile.init | 110 | ||||
-rw-r--r-- | http-cgi.scm | 6 | ||||
-rw-r--r-- | jscheme.init | 39 | ||||
-rw-r--r-- | limit.scm | 129 | ||||
-rw-r--r-- | limit.texi | 100 | ||||
-rw-r--r-- | lineio.scm | 5 | ||||
-rw-r--r-- | lineio.txi | 5 | ||||
-rw-r--r-- | linterp.scm | 90 | ||||
-rw-r--r-- | linterp.txi | 36 | ||||
-rw-r--r-- | macscheme.init | 28 | ||||
-rw-r--r-- | matfile.scm | 7 | ||||
-rw-r--r-- | mitscheme.init | 30 | ||||
-rw-r--r-- | mkclrnam.scm | 2 | ||||
-rw-r--r-- | mklibcat.scm | 9 | ||||
-rw-r--r-- | peanosfc.scm | 51 | ||||
-rw-r--r-- | peanosfc.txi | 24 | ||||
-rw-r--r-- | phil-spc.scm | 77 | ||||
-rw-r--r-- | phil-spc.txi | 28 | ||||
-rw-r--r-- | prec.scm | 2 | ||||
-rw-r--r-- | pscheme.init | 26 | ||||
-rw-r--r-- | require.scm | 10 | ||||
-rw-r--r-- | root.scm | 28 | ||||
-rw-r--r-- | scheme2c.init | 46 | ||||
-rw-r--r-- | scheme48.init | 30 | ||||
-rw-r--r-- | scsh.init | 30 | ||||
-rw-r--r-- | slib.info | 10142 | ||||
-rw-r--r-- | slib.spec | 106 | ||||
-rw-r--r-- | slib.texi | 218 | ||||
-rw-r--r-- | srfi-2.txi | 9 | ||||
-rw-r--r-- | srfi-61.scm | 49 | ||||
-rw-r--r-- | srfi-8.txi | 9 | ||||
-rw-r--r-- | srfi.scm | 9 | ||||
-rw-r--r-- | srfi.txi | 9 | ||||
-rw-r--r-- | t3.init | 26 | ||||
-rw-r--r-- | top-refs.scm | 8 | ||||
-rw-r--r-- | transact.scm | 22 | ||||
-rw-r--r-- | umbscheme.init | 44 | ||||
-rw-r--r-- | version.txi | 4 | ||||
-rw-r--r-- | vscm.init | 42 |
60 files changed, 6680 insertions, 5739 deletions
@@ -1,84 +1,99 @@ -This message announces the availability of Scheme Library release slib3a2. +This message announces the availability of Scheme Library release slib3a3. -It has been too long since the last release. Many bugs have been -fixed; and support for several implementations (especially Guile, -Scheme48) has been significantly improved. New in slib3a2: - - peanosfc.scm: Peano space filling curve. - - logical.scm: (logand, logior, logxor): Take one or more arguments. - Refactored to match SRFI-60. - - All uses of CREATE-ARRAY replaced by MAKE-ARRAY (SRFI-63). - All uses of ARRAY-SHAPE replaced with ARRAY-DIMENSIONS (SRFI-63). - - * subarray.scm (subarray, array-trim): Rewrote for all arrays being - 0-based. - - * arraymap.scm (array-map!, array-for-each, array-index-map!): - Use of ARRAY-DIMENSIONS replaces use of ARRAY-SHAPE. - (make-shared-array): converted. - - * array.scm: Made compatible with SRFI-63. - (equal?): Replaces array=?. - - pnm.scm: Finished implementation; handles 16-bit color. - - * colorspc.scm (read-normalized-illuminant, illuminant-map) - (illuminant-map->XYZ): Added. - (wavelength->CIEXYZ, XYZ:normalize, XYZ:normalize-colors) - (temperature->CIEXYZ, spectrum->CIEXYZ, wavelength->CIEXYZ): - Removed; use chromaticity functions instead. - (read-cie-illuminant): Added. - - * ciesia.dat: Added CIE Standard Illuminant A relative spectral - power distribution 300 nm - 830 nm at 5 nm intervals. - - * ciesid65.dat: Added CIE Standard Illuminant D65 relative - spectral power distribution 300 nm - 830 nm at 5 nm intervals. - - * daylight.scm (sunlight-chromaticity): Replaces sunlight-CIEXYZ. - - * solid.scm (scene:sun, scene:overcast): Use chromaticity to - normalize XYZ values. - (solid:polyline): Added. - (solid:cylinder): Negative radius for invisible side. +SLIB is a portable Scheme library providing compatibiliy and utility +functions for all standard Scheme implementations. - * format.scm: Made reentrant; restored. Call slib:error for errors. +SLIB supports the Bigloo, Chez, DrScheme, ELK, GAMBIT, Jscheme, +MacScheme, MITScheme, PocketScheme, RScheme, Scheme->C, Scheme48, SCM, +SCSH, T3.1, UMB-Scheme, and VSCM implementations. - * dbutil.scm (close-database): Don't lock immutable dbs. +SLIB is free software. It has a Permissive-Non-Warranty license +(http://www.swiss.ai.mit.edu/~jaffer/SLIB_COPYING.txt). - * transact.scm (word-lock:certificate): Test file's existence - before OPEN-FILE. +Documentation and distributions in several formats are linked from +SLIB's home page: - vet.scm (vet-slib): Accept file arguments to include in vetting. + http://swissnet.ai.mit.edu/~jaffer/SLIB.html - * vscm.init, umbscheme.init, scsh.init, macscheme.init, - guile.init, gambit.init, elk.init, chez.init, STk.init, - RScheme.init, Template.scm, pscheme.init, t3.init, scheme48.init, - scheme2c.init, s48-0_57.init, mitscheme.init, bigloo.init - (*features*): Regularized order and content. +Links to distributions of SLIB and related softwares are at the end of +this message. -=-=- +slib3a3 news: + +Multi-dimensional linear interpolation and resampling of arrays are +added. Case-folding of symbols is removed from SLIB. It should work +with implementations which are case-sensitive when reading symbols. + + * grapheps.scm (graph:plot): Plot multiple traces from array. + (functions->array): Generalizes graph:plot-function. + + * root.scm (integer-sqrt): Changed to algorithm attributed to + Bradley Lucier by Steve VanDevender. + * slib.texi (Root Finding): integer-sqrt changed to floor of sqrt. + + * linterp.scm (interpolate-array-ref, resample-array!): Added. + + * bytenumb.scm (bytes->ieee-float, bytes->ieee-double) + (ieee-float->bytes, ieee-double->bytes): Fixed for -0.0. + * bytenumb.scm (ieee-float->bytes, ieee-double->bytes): Handle 0/0 + in srfi-70 arithmetic. + + * guile.init (slib:load, slib:load-from-path): Adapted patch from + Thomas Bushnell BSG for loading into SLIB module. + * guile.init (home-vicinity): Check for getenv first. + (*features*): Fixed array, system, etc. + (system->line): Fixed return status (thanks to Rob Browning). + (guile:wrap-case-insensitive): Removed; sources now case clean. + * guile.init (system->line): Added features line-i/o and hash. + (implementation-vicinity): Fixed to parent directory of ice-9. + * guile.init (sub-vicinity): Downcased software-type symbols. + + * dirs.scm, transact.scm, batch.scm, prec.scm, + Template.scm, *.init: Downcased all software-type symbols. + * require.scm, mklibcat.scm, mkclrnam.scm, alistab.scm, Makefile: + Downcased *slib-version* symbol. + + * top-refs.scm (top-refs:expression): Check for lists before + walking CASE and COND clauses (srfi-61.scm macro broke it). + + * http-cgi.scm (query-alist->parameter-list): Fixed order of nary + fields. + * http-cgi.scm (http:status-line): Changed to HTTP-1.0; works + better in MS-Windows. + * db2html.scm (command:make-editable-table): Boolean "arity". + + * peanosfc.scm (peano-coordinates->natural) + (natural->peano-coordinates): Non-negative versions. + * phil-spc.scm (hilbert-coordinates->integer): nbits calculation + was missing (incorrectly used rank). + (bitwise-laminate, bitwise-delaminate): Removed unused functions. + + * slib.texi (SRFI): Added table mapping SRFI to feature. + (Scheme Syntax Extension Packages): Moved most SRFIs here. + * srfi.scm: Removed comments about copyright. + * mklibcat.scm (and-let*, receive, define-record-type) + (guarded-cond-clause): Added aliases for srfi-2, srfi-8, srfi-9, + and srfi-61. + * Makefile (srfiles): Most srfi-* moved from txiscms. + (srfiles): Added srfi-61. + + * slib.spec: Updated from RedHat version from Jindrich Novy. + * slib.spec (%post): Commented out install-info. + * slib.spec (install): Make slib executable. + * slib.spec: Fixed for rpmbuild version 4.3.1 + * Makefile (rpm): Program name changed to rpmbuild. + +From: Ivan Shmakov + * srfi-61.scm (cond): Added extension. -SLIB is a portable Scheme library providing compatibiliy and utility -functions for all standard Scheme implementations. - -SLIB includes initialization files for Bigloo, Chez, DrScheme, ELK, -GAMBIT, Jscheme, MacScheme, MITScheme, PocketScheme, RScheme, -Scheme->C, Scheme48, SCM, SCSH, T3.1, UMB-Scheme, and VSCM. - -Documentation includes a manifest, installation instructions, and -coding guidelines for the library. Documentation of each library -package is supplied. SLIB Documentation is online at: - - http://swissnet.ai.mit.edu/~jaffer/SLIB.html + -=-=- SLIB is available from: - http://swissnet.ai.mit.edu/ftpdir/scm/slib3a2.zip - http://swissnet.ai.mit.edu/ftpdir/scm/slib-3a2-1.noarch.rpm - swissnet.ai.mit.edu:/pub/scm/slib3a2.zip - swissnet.ai.mit.edu:/pub/scm/slib-3a2-1.noarch.rpm + http://swissnet.ai.mit.edu/ftpdir/scm/slib3a3.zip + http://swissnet.ai.mit.edu/ftpdir/scm/slib-3a3-1.noarch.rpm + swissnet.ai.mit.edu:/pub/scm/slib3a3.zip + swissnet.ai.mit.edu:/pub/scm/slib-3a3-1.noarch.rpm SLIB-PSD is a portable debugger for Scheme (requires emacs editor): http://swissnet.ai.mit.edu/ftpdir/scm/slib-psd1-3.tar.gz @@ -1,3 +1,116 @@ +2006-02-13 Aubrey Jaffer <jaffer@aubrey> + + * require.scm (*slib-version*): Bumped from 3a2 to 3a3. + +2006-02-02 Aubrey Jaffer <agj@alum.mit.edu> + + * grapheps.scm (graph:plot): Plot multiple traces from array. + (functions->array): Generalizes graph:plot-function. + +2006-01-16 Aubrey Jaffer <agj@alum.mit.edu> + + * guile.init (slib:load, slib:load-from-path): Adapted patch from + Thomas Bushnell BSG for loading into SLIB module. + + * top-refs.scm (top-refs:expression): Check for lists before + walking CASE and COND clauses (srfi-61.scm macro broke it). + +2006-01-09 Aubrey Jaffer <agj@alum.mit.edu> + + * http-cgi.scm (query-alist->parameter-list): Fixed order of nary + fields. + +2006-01-05 Aubrey Jaffer <agj@alum.mit.edu> + + * db2html.scm (command:make-editable-table): Boolean "arity". + + * http-cgi.scm (http:status-line): Changed to HTTP-1.0; works + better in MS-Windows. + +2005-12-01 Aubrey Jaffer <agj@alum.mit.edu> + + * require.scm, mklibcat.scm, mkclrnam.scm, alistab.scm, Makefile: + Downcased *slib-version* symbol. + + * guile.init (home-vicinity): Check for getenv first. + (*features*): Fixed array, system, etc. + (system->line): Fixed return status (thanks to Rob Browning). + (guile:wrap-case-insensitive): Removed; sources now case clean. + + * dirs.scm, transact.scm, batch.scm, prec.scm, + Template.scm, *.init: Downcased all software-type symbols. + +2005-11-26 Aubrey Jaffer <agj@alum.mit.edu> + + * guile.init (system->line): Added features line-i/o and hash. + (implementation-vicinity): Fixed to parent directory of ice-9. + +2005-11-01 Aubrey Jaffer <agj@alum.mit.edu> + + * peanosfc.scm (peano-coordinates->natural) + (natural->peano-coordinates): Non-negative versions. + +2005-10-29 Aubrey Jaffer <agj@alum.mit.edu> + + * bytenumb.scm (bytes->ieee-float, bytes->ieee-double) + (ieee-float->bytes, ieee-double->bytes): Fixed for -0.0. + +2005-10-25 Aubrey Jaffer <agj@alum.mit.edu> + + * bytenumb.scm (ieee-float->bytes, ieee-double->bytes): Handle 0/0 + in srfi-70 arithmetic. + +2005-10-18 Aubrey Jaffer <agj@alum.mit.edu> + + * slib.texi (SRFI): Added table mapping SRFI to feature. + (Scheme Syntax Extension Packages): Moved most SRFIs here. + + * mklibcat.scm (and-let*, receive, define-record-type) + (guarded-cond-clause): Added aliases for srfi-2, srfi-8, srfi-9, + and srfi-61. + + * srfi.scm: Removed comments about copyright. + + * slib.spec (%post): Commented out install-info. + + * Makefile (srfiles): Most srfi-* moved from txiscms. + (srfiles): Added srfi-61. + +2005-10-17 Ivan Shmakov + + * srfi-61.scm (cond): Added extension. + + * mklibcat.scm (srfi-61): Added. + +2005-10-16 Aubrey Jaffer <agj@alum.mit.edu> + + * slib.texi (Root Finding): integer-sqrt changed to floor of sqrt. + + * root.scm (integer-sqrt): Changed to algorithm attributed to + Bradley Lucier by Steve VanDevender. + +2005-09-25 Aubrey Jaffer <agj@alum.mit.edu> + + * slib.spec: Updated from RedHat version from Jindrich Novy. + + * guile.init (sub-vicinity): Downcased software-type symbols. + +2005-08-16 Aubrey Jaffer <agj@alum.mit.edu> + + * slib.texi (The Limit): Added. + +2005-08-09 Aubrey Jaffer <agj@alum.mit.edu> + + * slib.texi (Array Mapping): Added. + + * linterp.scm (interpolate-array-ref, resample-array!): Added. + +2005-07-28 Aubrey Jaffer <agj@alum.mit.edu> + + * phil-spc.scm (hilbert-coordinates->integer): nbits calculation + was missing (incorrectly used rank). + (bitwise-laminate, bitwise-delaminate): Removed unused functions. + 2005-06-22 Aubrey Jaffer <agj@alum.mit.edu> * slib.spec (install): Make slib executable. diff --git a/DrScheme.init b/DrScheme.init index 8cce2e9..ca4ec17 100644 --- a/DrScheme.init +++ b/DrScheme.init @@ -9,16 +9,16 @@ ;@ (define (software-type) (case (system-type) - [(unix macosx) 'UNIX] - [(windows) 'MS-DOS] - [(macos) 'MACOS] + [(unix macosx) 'unix] + [(windows) 'ms-dos] + [(macos) 'macos] [else (system-type)])) ;@ (define in-vicinity string-append) ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -26,12 +26,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -50,7 +50,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -60,10 +60,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -1,4 +1,4 @@ -FAQ (Frequently Asked Questions and answers) for SLIB Scheme Library (slib3a2). +FAQ (Frequently Asked Questions and answers) for SLIB Scheme Library (slib3a3). Written by Aubrey Jaffer (http://swissnet.ai.mit.edu/~jaffer). INTRODUCTION AND GENERAL INFORMATION @@ -46,7 +46,7 @@ Several times a year. [] What is the latest version? -The version as of this writing is slib3a2. The latest documentation +The version as of this writing is slib3a3. The latest documentation is available online at: http://swissnet.ai.mit.edu/~jaffer/SLIB.html @@ -16,8 +16,8 @@ srcdir.mk: .. Makefile #srcdir=$(HOME)/slib/ include srcdir.mk -VERSION = 3a2 -RELEASE = 1 +VERSION = 3a3 +RELEASE = 2 rpm_prefix=/usr/src/redhat/ prefix = /usr/local/ @@ -90,14 +90,14 @@ lfiles = sort.scm comlist.scm logical.scm revfiles = sc4opt.scm sc4sc3.scm sc2.scm mularg.scm mulapply.scm \ trnscrpt.scm withfile.scm dynwind.scm promise.scm \ values.scm eval.scm null.scm -afiles = charplot.scm root.scm cring.scm selfset.scm \ +afiles = charplot.scm root.scm cring.scm selfset.scm limit.scm \ timecore.scm psxtime.scm cltime.scm timezone.scm tzfile.scm bfiles = fluidlet.scm object.scm recobj.scm yasyn.scm collect.scm collectx.scm scfiles = r4rsyn.scm scmacro.scm synclo.scm synrul.scm synchk.scm \ repl.scm macwork.scm mwexpand.scm mwdenote.scm mwsynrul.scm scafiles = scainit.scm scaglob.scm scamacr.scm scaoutp.scm scaexpp.scm \ structure.scm -srfiles = srfi-9.scm +srfiles = srfi-2.scm srfi-8.scm srfi-9.scm srfi-61.scm efiles = record.scm dynamic.scm process.scm hash.scm \ wttree.scm wttest.scm sierpinski.scm soundex.scm simetrix.scm rfiles = rdms.scm alistab.scm paramlst.scm \ @@ -109,28 +109,28 @@ gfiles = colorspc.scm cie1931.xyz cie1964.xyz resenecolours.txt saturate.txt \ txiscms =grapheps.scm glob.scm getparam.scm \ vet.scm top-refs.scm hashtab.scm chap.scm comparse.scm\ alist.scm ratize.scm modular.scm dirs.scm priorque.scm queue.scm\ - srfi.scm srfi-1.scm srfi-2.scm srfi-8.scm\ + srfi.scm srfi-1.scm\ pnm.scm http-cgi.scm htmlform.scm html4each.scm db2html.scm uri.scm\ fft.scm solid.scm random.scm randinex.scm obj2str.scm ncbi-dna.scm\ minimize.scm factor.scm determ.scm daylight.scm colornam.scm\ mkclrnam.scm color.scm subarray.scm dbutil.scm array.scm transact.scm\ arraymap.scm phil-spc.scm lineio.scm differ.scm cvs.scm tree.scm\ coerce.scm byte.scm bytenumb.scm matfile.scm tsort.scm manifest.scm\ - peanosfc.scm + peanosfc.scm linterp.scm txifiles =grapheps.txi glob.txi getparam.txi\ vet.txi top-refs.txi hashtab.txi chap.txi comparse.txi\ alist.txi ratize.txi modular.txi dirs.txi priorque.txi queue.txi\ - srfi.txi srfi-1.txi srfi-2.txi srfi-8.txi\ + srfi.txi srfi-1.txi\ pnm.txi http-cgi.txi htmlform.txi html4each.txi db2html.txi uri.txi\ fft.txi solid.txi random.txi randinex.txi obj2str.txi ncbi-dna.txi\ minimize.txi factor.txi determ.txi daylight.txi colornam.txi\ mkclrnam.txi color.txi subarray.txi dbutil.txi array.txi transact.txi\ arraymap.txi phil-spc.txi lineio.txi differ.txi cvs.txi tree.txi\ coerce.txi byte.txi bytenumb.txi matfile.txi tsort.txi manifest.txi\ - peanosfc.txi + peanosfc.txi linterp.txi % = `echo $(txiscms) | sed 's%.scm%.txi%g'` -texifiles = schmooz.texi indexes.texi object.texi format.texi +texifiles = schmooz.texi indexes.texi object.texi format.texi limit.texi docfiles = ANNOUNCE README COPYING FAQ slib.1 slib.info slib.texi version.txi\ ChangeLog $(texifiles) $(txifiles) mkfiles = Makefile require.scm Template.scm syncase.sh mklibcat.scm \ @@ -362,7 +362,7 @@ $(dest)slib-psd.tar.gz: psdtemp/slib new: echo `date -I` \ Aubrey Jaffer \ \<`whoami`@`hostname`\>> change echo>> change - echo \ \* require.scm \(*SLIB-VERSION*\): Bumped from $(VERSION) to $(ver).>>change + echo \ \* require.scm \(*slib-version*\): Bumped from $(VERSION) to $(ver).>>change echo>> change cat ChangeLog >> change mv -f change ChangeLog @@ -386,7 +386,7 @@ new: $(DOSCM)dist/mkdisk.bat $(CHPAT) $(VERSION) $(ver) README slib.texi require.scm Makefile \ $(htmldir)SLIB.html slib.spec scheme48.init - cvs commit -lm '(*SLIB-VERSION*): Bumped from $(VERSION) to $(ver).' + cvs commit -lm '(*slib-version*): Bumped from $(VERSION) to $(ver).' cvs tag -lF slib$(ver) tagfiles = README version.txi slib.texi $(texifiles) \ @@ -1,4 +1,4 @@ -This directory contains the distribution of Scheme Library slib3a2. +This directory contains the distribution of Scheme Library slib3a3. Slib conforms to Revised^5 Report on the Algorithmic Language Scheme and the IEEE P1178 specification. Slib supports Unix and similar systems, VMS, and MS-DOS. @@ -74,6 +74,7 @@ The maintainer can be reached at agj @ alum.mit.edu. `factor.scm' has factor. `root.scm' has Newton's and Laguerre's methods for finding roots. `minimize.scm' has Golden Section Search for minimum value. + `limit.scm' computes one-sided limits. `cring.scm' extend + and * to custom commutative rings. `selfset.scm' sets single letter identifiers to their symbols. `determ.scm' compute determinant of list of lists. @@ -157,6 +158,7 @@ The maintainer can be reached at agj @ alum.mit.edu. `process.scm' has multi-processing primitives. `array.scm' has multi-dimensional arrays. `subarray.scm' has subarray and accessory procedures. + `linterp.scm' has interpolate-array-ref and resample-array!. `arraymap.scm' has array-map!, array-for-each, and array-indexes. `sort.scm' has sorted?, sort, sort!, merge, and merge!. diff --git a/RScheme.init b/RScheme.init index d04e4dc..292b963 100644 --- a/RScheme.init +++ b/RScheme.init @@ -9,7 +9,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -33,9 +33,9 @@ (define (implementation-vicinity) (case (software-type) - ((UNIX) "/usr/local/lib/rs/0.7.1/") - ((VMS) "scheme$src:") - ((MS-DOS) "C:\\scheme\\"))) + ((unix) "/usr/local/lib/rs/0.7.1/") + ((vms) "scheme$src:") + ((ms-dos) "C:\\scheme\\"))) ;;; (library-vicinity) should be defined to be the pathname of the ;;; directory where files of Scheme library functions reside. @@ -48,9 +48,9 @@ ;; Use this path if your scheme does not support GETENV ;; or if SCHEME_LIBRARY_PATH is not set. (case (software-type) - ((UNIX) "/usr/lib/slib/") - ((VMS) "lib$scheme:") - ((MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/lib/slib/") + ((vms) "lib$scheme:") + ((ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -61,7 +61,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -71,7 +71,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -79,12 +79,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -103,7 +103,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -113,10 +113,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -361,7 +361,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) @@ -7,7 +7,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -42,7 +42,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -52,7 +52,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -60,12 +60,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -84,7 +84,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -94,10 +94,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -312,7 +312,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/Template.scm b/Template.scm index b35f8e5..d24f984 100644 --- a/Template.scm +++ b/Template.scm @@ -4,8 +4,8 @@ ;;; This code is in the public domain. ;;@ (software-type) should be set to the generic operating system type. -;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +;;; unix, vms, macos, amiga and ms-dos are supported. +(define (software-type) 'unix) ;;@ (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -25,9 +25,9 @@ ;;; implementation reside. (define (implementation-vicinity) (case (software-type) - ((UNIX) "/usr/local/src/scheme/") - ((VMS) "scheme$src:") - ((MS-DOS) "C:\\scheme\\"))) + ((unix) "/usr/local/src/scheme/") + ((vms) "scheme$src:") + ((ms-dos) "C:\\scheme\\"))) ;;@ (library-vicinity) should be defined to be the pathname of the ;;; directory where files of Scheme library functions reside. @@ -39,9 +39,9 @@ ;; Use this path if your scheme does not support GETENV ;; or if SCHEME_LIBRARY_PATH is not set. (case (software-type) - ((UNIX) "/usr/local/lib/slib/") - ((VMS) "lib$scheme:") - ((MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/local/lib/slib/") + ((vms) "lib$scheme:") + ((ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -52,7 +52,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -63,7 +63,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -71,12 +71,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -95,7 +95,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -105,10 +105,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -364,7 +364,7 @@ ;;@ Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/alistab.scm b/alistab.scm index e8999bf..f8a5f70 100644 --- a/alistab.scm +++ b/alistab.scm @@ -61,7 +61,7 @@ (else #f))) (lambda (port) (display (string-append - ";;; \"" outfile "\" SLIB " *SLIB-VERSION* + ";;; \"" outfile "\" SLIB " *slib-version* " alist-table database -*-scheme-*-") port) (newline port) (newline port) @@ -32,7 +32,7 @@ (lambda (str) 1))) (define system:success? (case (software-type) - ((VMS) (lambda (int) (eqv? 1 int))) + ((vms) (lambda (int) (eqv? 1 int))) (else zero?))) ;;(trace system system:success? exit quit slib:exit) @@ -471,7 +471,7 @@ ) ;@ (define *operating-system* - (cond ((and (eq? 'UNIX (software-type)) (provided? 'system)) + (cond ((and (eq? 'unix (software-type)) (provided? 'system)) (let* ((file-name (tmpnam)) (uname (and (system (string-append "uname > " file-name)) (call-with-input-file file-name read))) @@ -480,11 +480,11 @@ (cond ((and ustr (> (string-length ustr) 5) (string-ci=? "cygwin" (substring ustr 0 6))) - 'GNU-WIN32) + 'gnu-win32) ((and ustr (> (string-length ustr) 4) (string-ci=? "mingw" (substring ustr 0 5))) - 'GNU-WIN32) + 'gnu-win32) (ustr uname) (else (software-type))))) (else (software-type)))) diff --git a/bigloo.init b/bigloo.init index af34546..eb607bb 100644 --- a/bigloo.init +++ b/bigloo.init @@ -5,7 +5,7 @@ ;;@ (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;@ (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -26,8 +26,8 @@ ;;; implementation reside. (define (implementation-vicinity) (case (software-type) - ((UNIX) (string-append *default-lib-dir* "/")) - ((MS-DOS) "C:\\scheme\\") + ((unix) (string-append *default-lib-dir* "/")) + ((ms-dos) "C:\\scheme\\") (else ""))) ;;@ (library-vicinity) should be defined to be the pathname of the @@ -40,12 +40,12 @@ ;; Use this path if your scheme does not support GETENV ;; or if SCHEME_LIBRARY_PATH is not set. (case (software-type) - ((UNIX) (cond ((directory? "/usr/share/slib/") + ((unix) (cond ((directory? "/usr/share/slib/") "/usr/share/slib/") ((directory? "/usr/local/lib/slib/") "/usr/local/lib/slib/") (else ""))) - ((MS-DOS) "C:\\SLIB\\") + ((ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -56,7 +56,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -66,7 +66,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -74,12 +74,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -98,7 +98,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -108,10 +108,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -355,7 +355,7 @@ ;;@ Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/bytenumb.scm b/bytenumb.scm index 7febf64..cb9b5c5 100644 --- a/bytenumb.scm +++ b/bytenumb.scm @@ -103,11 +103,11 @@ (idx (+ -2 len) (+ -1 idx))) ((<= idx 1) (set! F (/ (+ (logand #x7F (byte-ref bytes 1)) (/ F 256)) 128)) - (cond ((< 0 E 255) (* (if S -1 1) (expt 2 (- E 127)) (+ 1 F))) + (cond ((< 0 E 255) (* (if S (- one) one) (expt 2 (- E 127)) (+ 1 F))) ((zero? E) (if (zero? F) (if S (- zero) zero) - (* (if S -1 1) (expt 2 -126) F))) + (* (if S (- one) one) (expt 2 -126) F))) ;; E must be 255 ((not (zero? F)) (/ zero zero)) (else (/ (if S (- one) one) zero)))))) @@ -117,6 +117,8 @@ ;; 0 1 8 9 31 ;;@example +;;(bytes->ieee-float (bytes 0 0 0 0)) @result{} 0.0 +;;(bytes->ieee-float (bytes #x80 0 0 0)) @result{} -0.0 ;;(bytes->ieee-float (bytes #x40 0 0 0)) @result{} 2.0 ;;(bytes->ieee-float (bytes #x40 #xd0 0 0)) @result{} 6.5 ;;(bytes->ieee-float (bytes #xc0 #xd0 0 0)) @result{} -6.5 @@ -125,8 +127,8 @@ ;;(bytes->ieee-float (bytes 0 #x40 0 0)) @result{} 5.877471754111437e-39 ;;(bytes->ieee-float (bytes 0 0 0 1)) @result{} 1.401298464324817e-45 ;; -;;(bytes->ieee-float (bytes #xff #x80 0 0)) @result{} -1/0 -;;(bytes->ieee-float (bytes #x7f #x80 0 0)) @result{} 1/0 +;;(bytes->ieee-float (bytes #xff #x80 0 0)) @result{} -inf.0 +;;(bytes->ieee-float (bytes #x7f #x80 0 0)) @result{} +inf.0 ;;(bytes->ieee-float (bytes #x7f #x80 0 1)) @result{} 0/0 ;;@end example @@ -147,11 +149,11 @@ (idx (+ -2 len) (+ -1 idx))) ((<= idx 1) (set! F (/ (+ (logand #x0F (byte-ref bytes 1)) (/ F 256)) 16)) - (cond ((< 0 E 2047) (* (if S -1 1) (expt 2 (- E 1023)) (+ 1 F))) + (cond ((< 0 E 2047) (* (if S (- one) one) (expt 2 (- E 1023)) (+ 1 F))) ((zero? E) (if (zero? F) (if S (- zero) zero) - (* (if S -1 1) (expt 2 -1022) F))) + (* (if S (- one) one) (expt 2 -1022) F))) ;; E must be 2047 ((not (zero? F)) (/ zero zero)) (else (/ (if S (- one) one) zero)))))) @@ -162,7 +164,8 @@ ;;@example ;;(bytes->ieee-double (bytes 0 0 0 0 0 0 0 0)) @result{} 0.0 -;;(bytes->ieee-double (bytes #x40 0 0 0 0 0 0 0)) @result{} 2 +;;(bytes->ieee-double (bytes #x80 0 0 0 0 0 0 0)) @result{} -0.0 +;;(bytes->ieee-double (bytes #x40 0 0 0 0 0 0 0)) @result{} 2.0 ;;(bytes->ieee-double (bytes #x40 #x1A 0 0 0 0 0 0)) @result{} 6.5 ;;(bytes->ieee-double (bytes #xC0 #x1A 0 0 0 0 0 0)) @result{} -6.5 ;; @@ -170,8 +173,8 @@ ;;(bytes->ieee-double (bytes 0 4 0 0 0 0 0 0)) @result{} 5.562684646268003e-309 ;;(bytes->ieee-double (bytes 0 0 0 0 0 0 0 1)) @result{} 4.0e-324 ;; -;;(bytes->ieee-double (bytes #xFF #xF0 0 0 0 0 0 0)) @result{} -1/0 -;;(bytes->ieee-double (bytes #x7F #xF0 0 0 0 0 0 0)) @result{} 1/0 +;;(bytes->ieee-double (bytes #xFF #xF0 0 0 0 0 0 0)) @result{} -inf.0 +;;(bytes->ieee-double (bytes #x7F #xF0 0 0 0 0 0 0)) @result{} +inf.0 ;;(bytes->ieee-double (bytes #x7F #xF8 0 0 0 0 0 0)) @result{} 0/0 ;;@end example @@ -183,11 +186,11 @@ (exactify (if (provided? 'inexact) inexact->exact identity))) (lambda (flt) (define byts (make-bytes 4 0)) - (define S (negative? flt)) + (define S (and (real? flt) (negative? (if (zero? flt) (/ flt) flt)))) (define (scale flt scl) (cond ((zero? scl) (out (/ flt 2) scl)) - ((zero? flt) byts) - ((>= flt 16) + ((zero? flt) (if S (byte-set! byts 0 #x80)) byts) + ((or (not (real? flt)) (>= flt 16)) (let ((flt/16 (/ flt 16))) (cond ((= flt/16 flt) (byte-set! byts 0 (if S #xFF #x7F)) @@ -211,6 +214,8 @@ (byte-set! byts idx val))) (scale (abs flt) 127)))) ;;@example +;;(bytes->list (ieee-float->bytes 0.0)) @result{} (0 0 0 0) +;;(bytes->list (ieee-float->bytes -0.0)) @result{} (128 0 0 0) ;;(bytes->list (ieee-float->bytes 2.0)) @result{} (64 0 0 0) ;;(bytes->list (ieee-float->bytes 6.5)) @result{} (64 208 0 0) ;;(bytes->list (ieee-float->bytes -6.5)) @result{} (192 208 0 0) @@ -219,8 +224,8 @@ ;;(bytes->list (ieee-float->bytes 5.877471754111438e-39)) @result{} ( 0 64 0 0) ;;(bytes->list (ieee-float->bytes 1.401298464324817e-45)) @result{} ( 0 0 0 1) ;; -;;(bytes->list (ieee-float->bytes -1/0)) @result{} (255 128 0 0) -;;(bytes->list (ieee-float->bytes 1/0)) @result{} (127 128 0 0) +;;(bytes->list (ieee-float->bytes -inf.0)) @result{} (255 128 0 0) +;;(bytes->list (ieee-float->bytes +inf.0)) @result{} (127 128 0 0) ;;(bytes->list (ieee-float->bytes 0/0)) @result{} (127 128 0 1) ;;@end example @@ -233,11 +238,11 @@ (exactify (if (provided? 'inexact) inexact->exact identity))) (lambda (flt) (define byts (make-bytes 8 0)) - (define S (negative? flt)) + (define S (and (real? flt) (negative? (if (zero? flt) (/ flt) flt)))) (define (scale flt scl) (cond ((zero? scl) (out (/ flt 2) scl)) - ((zero? flt) byts) - ((>= flt 16) + ((zero? flt) (if S (byte-set! byts 0 #x80)) byts) + ((or (not (real? flt)) (>= flt 16)) (let ((flt/16 (/ flt 16))) (cond ((= flt/16 flt) (byte-set! byts 0 (if S #xFF #x7F)) @@ -261,6 +266,8 @@ (byte-set! byts idx val))) (scale (abs flt) 1023)))) ;;@example +;;(bytes->list (ieee-double->bytes 0.0)) @result{} (0 0 0 0 0 0 0 0) +;;(bytes->list (ieee-double->bytes -0.0)) @result{} (128 0 0 0 0 0 0 0) ;;(bytes->list (ieee-double->bytes 2.0)) @result{} (64 0 0 0 0 0 0 0) ;;(bytes->list (ieee-double->bytes 6.5)) @result{} (64 26 0 0 0 0 0 0) ;;(bytes->list (ieee-double->bytes -6.5)) @result{} (192 26 0 0 0 0 0 0) @@ -272,8 +279,8 @@ ;;(bytes->list (ieee-double->bytes 4.0e-324)) ;; @result{} ( 0 0 0 0 0 0 0 1) ;; -;;(bytes->list (ieee-double->bytes -1/0)) @result{} (255 240 0 0 0 0 0 0) -;;(bytes->list (ieee-double->bytes 1/0)) @result{} (127 240 0 0 0 0 0 0) +;;(bytes->list (ieee-double->bytes -inf.0)) @result{} (255 240 0 0 0 0 0 0) +;;(bytes->list (ieee-double->bytes +inf.0)) @result{} (127 240 0 0 0 0 0 0) ;;(bytes->list (ieee-double->bytes 0/0)) @result{} (127 248 0 0 0 0 0 0) ;;@end example diff --git a/bytenumb.txi b/bytenumb.txi index 9be7630..97f9b26 100644 --- a/bytenumb.txi +++ b/bytenumb.txi @@ -53,6 +53,8 @@ value of @var{bytes} interpreted as a big-endian IEEE 4-byte (32-bit) number. @end defun @example +(bytes->ieee-float (bytes 0 0 0 0)) @result{} 0.0 +(bytes->ieee-float (bytes #x80 0 0 0)) @result{} -0.0 (bytes->ieee-float (bytes #x40 0 0 0)) @result{} 2.0 (bytes->ieee-float (bytes #x40 #xd0 0 0)) @result{} 6.5 (bytes->ieee-float (bytes #xc0 #xd0 0 0)) @result{} -6.5 @@ -61,8 +63,8 @@ value of @var{bytes} interpreted as a big-endian IEEE 4-byte (32-bit) number. (bytes->ieee-float (bytes 0 #x40 0 0)) @result{} 5.877471754111437e-39 (bytes->ieee-float (bytes 0 0 0 1)) @result{} 1.401298464324817e-45 -(bytes->ieee-float (bytes #xff #x80 0 0)) @result{} -1/0 -(bytes->ieee-float (bytes #x7f #x80 0 0)) @result{} 1/0 +(bytes->ieee-float (bytes #xff #x80 0 0)) @result{} -inf.0 +(bytes->ieee-float (bytes #x7f #x80 0 0)) @result{} +inf.0 (bytes->ieee-float (bytes #x7f #x80 0 1)) @result{} 0/0 @end example @@ -75,7 +77,8 @@ value of @var{bytes} interpreted as a big-endian IEEE 8-byte (64-bit) number. @example (bytes->ieee-double (bytes 0 0 0 0 0 0 0 0)) @result{} 0.0 -(bytes->ieee-double (bytes #x40 0 0 0 0 0 0 0)) @result{} 2 +(bytes->ieee-double (bytes #x80 0 0 0 0 0 0 0)) @result{} -0.0 +(bytes->ieee-double (bytes #x40 0 0 0 0 0 0 0)) @result{} 2.0 (bytes->ieee-double (bytes #x40 #x1A 0 0 0 0 0 0)) @result{} 6.5 (bytes->ieee-double (bytes #xC0 #x1A 0 0 0 0 0 0)) @result{} -6.5 @@ -83,8 +86,8 @@ value of @var{bytes} interpreted as a big-endian IEEE 8-byte (64-bit) number. (bytes->ieee-double (bytes 0 4 0 0 0 0 0 0)) @result{} 5.562684646268003e-309 (bytes->ieee-double (bytes 0 0 0 0 0 0 0 1)) @result{} 4.0e-324 -(bytes->ieee-double (bytes #xFF #xF0 0 0 0 0 0 0)) @result{} -1/0 -(bytes->ieee-double (bytes #x7F #xF0 0 0 0 0 0 0)) @result{} 1/0 +(bytes->ieee-double (bytes #xFF #xF0 0 0 0 0 0 0)) @result{} -inf.0 +(bytes->ieee-double (bytes #x7F #xF0 0 0 0 0 0 0)) @result{} +inf.0 (bytes->ieee-double (bytes #x7F #xF8 0 0 0 0 0 0)) @result{} 0/0 @end example @@ -96,6 +99,8 @@ floating-point of @var{x}. @end defun @example +(bytes->list (ieee-float->bytes 0.0)) @result{} (0 0 0 0) +(bytes->list (ieee-float->bytes -0.0)) @result{} (128 0 0 0) (bytes->list (ieee-float->bytes 2.0)) @result{} (64 0 0 0) (bytes->list (ieee-float->bytes 6.5)) @result{} (64 208 0 0) (bytes->list (ieee-float->bytes -6.5)) @result{} (192 208 0 0) @@ -104,8 +109,8 @@ floating-point of @var{x}. (bytes->list (ieee-float->bytes 5.877471754111438e-39)) @result{} ( 0 64 0 0) (bytes->list (ieee-float->bytes 1.401298464324817e-45)) @result{} ( 0 0 0 1) -(bytes->list (ieee-float->bytes -1/0)) @result{} (255 128 0 0) -(bytes->list (ieee-float->bytes 1/0)) @result{} (127 128 0 0) +(bytes->list (ieee-float->bytes -inf.0)) @result{} (255 128 0 0) +(bytes->list (ieee-float->bytes +inf.0)) @result{} (127 128 0 0) (bytes->list (ieee-float->bytes 0/0)) @result{} (127 128 0 1) @end example @@ -117,6 +122,8 @@ floating-point of @var{x}. @end defun @example +(bytes->list (ieee-double->bytes 0.0)) @result{} (0 0 0 0 0 0 0 0) +(bytes->list (ieee-double->bytes -0.0)) @result{} (128 0 0 0 0 0 0 0) (bytes->list (ieee-double->bytes 2.0)) @result{} (64 0 0 0 0 0 0 0) (bytes->list (ieee-double->bytes 6.5)) @result{} (64 26 0 0 0 0 0 0) (bytes->list (ieee-double->bytes -6.5)) @result{} (192 26 0 0 0 0 0 0) @@ -128,8 +135,8 @@ floating-point of @var{x}. (bytes->list (ieee-double->bytes 4.0e-324)) @result{} ( 0 0 0 0 0 0 0 1) -(bytes->list (ieee-double->bytes -1/0)) @result{} (255 240 0 0 0 0 0 0) -(bytes->list (ieee-double->bytes 1/0)) @result{} (127 240 0 0 0 0 0 0) +(bytes->list (ieee-double->bytes -inf.0)) @result{} (255 240 0 0 0 0 0 0) +(bytes->list (ieee-double->bytes +inf.0)) @result{} (127 240 0 0 0 0 0 0) (bytes->list (ieee-double->bytes 0/0)) @result{} (127 248 0 0 0 0 0 0) @end example @@ -8,7 +8,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -40,9 +40,9 @@ ;; Use this path if your scheme does not support GETENV ;; or if SCHEME_LIBRARY_PATH is not set. (case (software-type) - ((UNIX) "/usr/local/lib/slib/") - ((VMS) "lib$scheme:") - ((MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/local/lib/slib/") + ((vms) "lib$scheme:") + ((ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -53,7 +53,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -63,7 +63,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -71,12 +71,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -95,7 +95,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -105,10 +105,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -357,7 +357,7 @@ ;;; file suffix. (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/db2html.scm b/db2html.scm index 8ad97e1..9b4709f 100644 --- a/db2html.scm +++ b/db2html.scm @@ -356,7 +356,7 @@ (case (string-ref dstr len) ((#\*) 'nary) ((#\+) 'nary1) - (else 'single))) + (else (if (eq? 'boolean type) 'boolean 'single)))) (case (string-ref dstr len) ((#\* #\+) (set! type (string->symbol (substring dstr 0 len))) @@ -33,12 +33,12 @@ ;;If @0 cannot be supported by the platform, then #f is returned. (define current-directory (case (software-type) - ;;((AMIGA) ) - ;;((MACOS THINKC) ) - ((MS-DOS WINDOWS ATARIST OS/2) (lambda () (system->line "cd"))) - ;;((NOSVE) ) - ((UNIX COHERENT PLAN9) (lambda () (system->line "pwd"))) - ;;((VMS) ) + ;;((amiga) ) + ;;((macos thinkc) ) + ((ms-dos windows atarist os/2) (lambda () (system->line "cd"))) + ;;((nosve) ) + ((unix coherent plan9) (lambda () (system->line "pwd"))) + ;;((vms) ) (else #f))) ;;@body @@ -49,9 +49,9 @@ (define (dir:lister dirname tmp) (case (software-type) - ((UNIX COHERENT PLAN9) + ((unix coherent plan9) (zero? (system (string-append "ls '" dirname "' > " tmp)))) - ((MS-DOS WINDOWS OS/2 ATARIST) + ((ms-dos windows os/2 atarist) (zero? (system (string-append "DIR /B \"" dirname "\" > " tmp)))) (else (slib:error (software-type) 'list?)))) @@ -16,7 +16,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -37,9 +37,9 @@ ;;; implementation reside. (define (implementation-vicinity) (case (software-type) - ((UNIX) "/usr/share/elk/") - ((VMS) "scheme$src:") - ((MS-DOS) "C:\\scheme\\"))) + ((unix) "/usr/share/elk/") + ((vms) "scheme$src:") + ((ms-dos) "C:\\scheme\\"))) ;;; (library-vicinity) should be defined to be the pathname of the ;;; directory where files of Scheme library functions reside. @@ -52,9 +52,9 @@ (or (getenv "SCHEME_LIBRARY_PATH") ;; Uses this path if SCHEME_LIBRARY_PATH is not defined. (case (software-type) - ((UNIX) "/usr/local/lib/slib/") - ((VMS) "lib$scheme:") - ((MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/local/lib/slib/") + ((vms) "lib$scheme:") + ((ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -65,7 +65,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -75,7 +75,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -83,12 +83,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -107,7 +107,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -117,10 +117,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -400,7 +400,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/gambit.init b/gambit.init index d50edae..5ca0d67 100644 --- a/gambit.init +++ b/gambit.init @@ -13,8 +13,8 @@ ;;; gsi should be invoked with -:s option to Ignore case when reading ;;; symbols (per R5RS). -(define (software-type) 'MACOS) ; for MacGambit. -(define (software-type) 'UNIX) ; for Unix platforms. +(define (software-type) 'macos) ; for MacGambit. +(define (software-type) 'unix) ; for Unix platforms. (define (scheme-implementation-type) 'gambit) @@ -35,11 +35,11 @@ ;;; implementation reside. (define implementation-vicinity (case (software-type) - ((UNIX) (lambda () "/usr/local/share/gambc/")) - ((VMS) (lambda () "scheme$src:")) - ((MS-DOS) (lambda () "C:\\scheme\\")) - ((WINDOWS) (lambda () "c:/scheme/")) - ((MACOS) + ((unix) (lambda () "/usr/local/share/gambc/")) + ((vms) (lambda () "scheme$src:")) + ((ms-dos) (lambda () "C:\\scheme\\")) + ((windows) (lambda () "c:/scheme/")) + ((macos) (let ((arg0 (list-ref (argv) 0))) (let loop ((i (- (string-length arg0) 1))) (cond ((negative? i) "") @@ -61,11 +61,11 @@ ;; Use this path if your scheme does not support GETENV ;; or if SCHEME_LIBRARY_PATH is not set. (case (software-type) - ((UNIX) "/usr/local/lib/slib/") - ((MACOS) (string-append (implementation-vicinity) "slib:")) - ((AMIGA) "dh0:scm/Library/") - ((VMS) "lib$scheme:") - ((WINDOWS MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/local/lib/slib/") + ((macos) (string-append (implementation-vicinity) "slib:")) + ((amiga) "dh0:scm/Library/") + ((vms) "lib$scheme:") + ((windows ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -76,22 +76,22 @@ (let ((home (getenv "HOME"))) (if home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) (else home)) (case (software-type) - ((VMS) "~:") - ((WINDOWS) "~/") - ((MACOS) "~:") + ((vms) "~:") + ((windows) "~/") + ((macos) "~:") (else #f))))) ;@ (define in-vicinity string-append) ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -99,12 +99,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -123,7 +123,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -133,10 +133,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -391,7 +391,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/grapheps.scm b/grapheps.scm index 677ae34..d64262f 100644 --- a/grapheps.scm +++ b/grapheps.scm @@ -477,22 +477,42 @@ idx 1)))) (create-postscript-graph tmp (or graph:dimensions '(600 300)) - (whole-page) (setup-plot (column-range data 0) (column-range data 1)) + (whole-page) + (setup-plot (column-range data 0) + (apply combine-ranges + (do ((idx (+ -1 (cadr (array-dimensions data))) (+ -1 idx)) + (lst '() (cons (column-range data idx) lst))) + ((< idx 1) lst)))) (outline-rect plotrect) (x-axis) (y-axis) - (plot-column data 0 1 (if histogram? 'bargraph 'line)) + (do ((idx (+ -1 (cadr (array-dimensions data))) (+ -1 idx)) + (lst '() (cons + (plot-column data 0 idx (if histogram? 'bargraph 'line)) + lst))) + ((< idx 1) lst)) (rule-vertical leftedge ylabel 10) (rule-horizontal bottomedge xlabel 10))) -(define (graph:plot-function tmp func vlo vhi . npts) - (set! npts (if (null? npts) 200 (car npts))) - (let ((dats (make-array (A:floR64b) npts 2))) - (array-index-map! (make-shared-array dats (lambda (idx) (list idx 0)) npts) +(define (functions->array vlo vhi npts . funcs) + (let ((dats (make-array (A:floR32b) npts (+ 1 (length funcs))))) + (define jdx 1) + (array-index-map! (make-shared-array dats + (lambda (idx) (list idx 0)) + npts) (lambda (idx) (+ vlo (* (- vhi vlo) (/ idx (+ -1 npts)))))) - (array-map! (make-shared-array dats (lambda (idx) (list idx 1)) npts) - func - (make-shared-array dats (lambda (idx) (list idx 0)) npts)) + (for-each (lambda (func) + (array-map! + (make-shared-array dats (lambda (idx) (list idx jdx)) npts) + func + (make-shared-array dats (lambda (idx) (list idx 0)) npts)) + (set! jdx (+ 1 jdx))) + funcs) + dats)) + +(define (graph:plot-function tmp func vlo vhi . npts) + (set! npts (if (null? npts) 200 (car npts))) + (let ((dats (functions->array vlo vhi npts func))) (graph:plot tmp dats "" ""))) ;;@body @@ -507,6 +527,11 @@ ;;over the range @2 to @3. If the optional integer argument @4 is ;;supplied, it specifies the number of points to evaluate @1 at. ;; +;;@defunx x1 x2 npts func1 func2 ... +;;Creates and displays an encapsulated PostScript graph of the +;;one-argument functions @var{func1}, @var{func2}, ... over the range +;;@var{x1} to @var{x2} at @var{npts} points. +;; ;;@defunx plot coords x-label y-label ;;@var{coords} is a list or vector of coordinates, lists of x and y ;;coordinates. @var{x-label} and @var{y-label} are strings with which @@ -514,13 +539,15 @@ (define (plot . args) (call-with-tmpnam (lambda (tmp) - (if (procedure? (car args)) - (apply graph:plot-function tmp args) - (apply graph:plot tmp args)) + (cond ((procedure? (car args)) + (apply graph:plot-function tmp args)) + ((array? (car args)) + (apply graph:plot tmp args)) + (else (let ((dats (apply functions->array args))) + (graph:plot tmp dats "" "")))) (system (string-append "gv '" tmp "'"))) ".eps")) - ;;@node Example Graph, , Legacy Plotting, PostScript Graphing ;;@subsubsection Example Graph diff --git a/grapheps.txi b/grapheps.txi index b0acc81..afa5ede 100644 --- a/grapheps.txi +++ b/grapheps.txi @@ -391,6 +391,11 @@ encapsulated PostScript graph of the function of one argument @var{func} over the range @var{x1} to @var{x2}. If the optional integer argument @var{npts} is supplied, it specifies the number of points to evaluate @var{func} at. +@defunx x1 x2 npts func1 func2 ... +Creates and displays an encapsulated PostScript graph of the +one-argument functions @var{func1}, @var{func2}, ... over the range +@var{x1} to @var{x2} at @var{npts} points. + @defunx plot coords x-label y-label @var{coords} is a list or vector of coordinates, lists of x and y coordinates. @var{x-label} and @var{y-label} are strings with which @@ -45,9 +45,9 @@ ;;; the directory where any auxillary files to your Scheme ;;; implementation reside. (define implementation-vicinity - (let* ((path (or (%search-load-path "slib/require.scm") - (error "Could not find slib/require.scm in " %load-path))) - (vic (substring path 0 (- (string-length path) 16)))) + (let* ((path (or (%search-load-path "ice-9/q.scm") + (error "Could not find ice-9/q.scm in " %load-path))) + (vic (substring path 0 (- (string-length path) 11)))) (lambda () vic))) ;;; (library-vicinity) should be defined to be the pathname of the @@ -66,7 +66,7 @@ ;;; directory, the directory which typically contains files which ;;; customize a computer environment for a user. (define (home-vicinity) - (let ((home (getenv "HOME"))) + (let ((home (and (defined? 'getenv) (getenv "HOME")))) (and home (case (software-type) ((unix coherent ms-dos) ;V7 unix has a / on HOME @@ -79,7 +79,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) ;@ (define vicinity:suffix? @@ -111,7 +111,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -121,10 +121,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -190,6 +190,7 @@ ;STRING-NULL?, APPEND!, 1+, ;-1+, <?, <=?, =?, >?, >=? ;;; object-hash ;has OBJECT-HASH + hash ;HASH, HASHV, HASHQ full-continuation ;can return multiple times ;;; ieee-floating-point ;conforms to IEEE Standard 754-1985 @@ -206,6 +207,7 @@ ;;; record ;has user defined data structures string-port ;has CALL-WITH-INPUT-STRING and ;CALL-WITH-OUTPUT-STRING + line-i/o ;;; sort ;;; pretty-print ;;; object->string @@ -213,7 +215,7 @@ ;;; trace ;has macros: TRACE and UNTRACE ;;; compiler ;has (COMPILER) ;;; ed ;(ED) is editor -;;; system ;posix (system <string>) + system ;posix (system <string>) ;;; getenv ;posix (getenv <string>) ;;; program-arguments ;returns list of strings (argv) ;;; current-time ;returns time in seconds since 1/1/1970 @@ -223,6 +225,8 @@ logical random ;Random numbers + array + array-for-each ) (if (defined? 'getenv) @@ -233,22 +237,10 @@ '(current-time) '()) - (if (defined? 'system) - '(system) - '()) - - (if (defined? 'array?) - '(array) - '()) - (if (defined? 'char-ready?) '(char-ready?) '()) - (if (defined? 'array-for-each) - '(array-for-each) - '()) - *features*)) ;;; (OUTPUT-PORT-WIDTH <port>) @@ -277,16 +269,17 @@ (+ 128 (or (status:term-sig st) (status:stop-sig st))))))) -;;; (TMPNAM) makes a temporary file name. -;;(define tmpnam (let ((cntr 100)) -;; (lambda () (set! cntr (+ 1 cntr)) -;; (string-append "slib_" (number->string cntr))))) - -;;; (FILE-EXISTS? <string>) -;;(define (file-exists? f) #f) +;;; for line-i/o +(use-modules (ice-9 popen)) +(define (system->line command . tmp) + (let ((ipip (open-input-pipe command))) + (define line (read-line ipip)) + (let ((status (close-pipe ipip))) + (and (or (eqv? 0 (status:exit-val status)) + (status:term-sig status) + (status:stop-sig status)) + (if (eof-object? line) "" line))))) -;;; (DELETE-FILE <string>) -;;(define (delete-file f) #f) (define delete-file (let ((guile-core-delete-file delete-file)) (lambda (filename) @@ -354,29 +347,44 @@ ;;; Here for backward compatability ;;(define scheme-file-suffix ;; (let ((suffix (case (software-type) -;; ((NOSVE) "_scm") +;; ((nosve) "_scm") ;; (else ".scm")))) ;; (lambda () suffix))) -(define (guile:wrap-case-insensitive proc) - (lambda args - (save-module-excursion - (lambda () - (set-current-module slib-module) - (let ((old (read-options))) - (dynamic-wind - (lambda () (read-enable 'case-insensitive)) - (lambda () (apply proc args)) - (lambda () (read-options old)))))))) +;;; (define (guile:wrap-case-insensitive proc) +;;; (lambda args +;;; (save-module-excursion +;;; (lambda () +;;; (set-current-module slib-module) +;;; (let ((old (read-options))) +;;; (dynamic-wind +;;; (lambda () (read-enable 'case-insensitive)) +;;; (lambda () (apply proc args)) +;;; (lambda () (read-options old)))))))) -(define read (guile:wrap-case-insensitive read)) +;;; (define read (guile:wrap-case-insensitive read)) ;;; (SLIB:LOAD-SOURCE "foo") should load "foo.scm" or with whatever ;;; suffix all the module files in SLIB have. See feature 'SOURCE. -(define slib:load - (let ((load-file (guile:wrap-case-insensitive load))) - (lambda (<pathname>) - (load-file (string-append <pathname> (scheme-file-suffix)))))) +;;; (define slib:load +;;; (let ((load-file (guile:wrap-case-insensitive load))) +;;; (lambda (<pathname>) +;;; (load-file (string-append <pathname> (scheme-file-suffix)))))) +(define (slib:load-helper loader) + (lambda (name) + (save-module-excursion + (lambda () + (set-current-module slib-module) + (let ((errinfo (catch 'system-error + (lambda () (loader name) #f) + (lambda args args)))) + (if (and errinfo + (catch 'system-error + (lambda () (loader (string-append name ".scm")) #f) + (lambda args args))) + (apply throw errinfo))))))) +(define slib:load (slib:load-helper load)) +(define slib:load-from-path (slib:load-helper load-from-path)) (define slib:load-source slib:load) @@ -524,9 +532,9 @@ (define A:floR32b ar32) (define A:floR16b ar32) ;; decimal flonums -(define A:flor128d ar64) -(define A:flor64d ar64) -(define A:flor32d ar32) +(define A:floR128d ar64) +(define A:floR64d ar64) +(define A:floR32d ar32) ;; fixnums (define A:fixZ64b as64) (define A:fixZ32b as32) diff --git a/http-cgi.scm b/http-cgi.scm index 1dd1c07..f8f9793 100644 --- a/http-cgi.scm +++ b/http-cgi.scm @@ -90,7 +90,7 @@ (else #f))) (define (http:status-line status-code reason) - (sprintf #f "HTTP/1.1 %d %s%s" status-code reason http:crlf)) + (sprintf #f "HTTP/1.0 %d %s%s" status-code reason http:crlf)) ;;@body Returns a string containing lines for each element of @1; the ;;@code{car} of which is followed by @samp{: }, then the @code{cdr}. @@ -126,7 +126,7 @@ (sprintf #f "<A HREF=http://swiss.csail.mit.edu/~jaffer/SLIB.html>SLIB</A> %s server" - (if (getenv "SERVER_PROTOCOL") "CGI/1.1" "HTTP/1.1")))) + (if (getenv "SERVER_PROTOCOL") "CGI/1.0" "HTTP/1.0")))) (string-append (http:status-line status-code reason-phrase) (http:content '(("Content-Type" . "text/html")) @@ -389,7 +389,7 @@ (coerce->list value (list-ref types opt-pos))) (else (list (coerce value (list-ref types opt-pos))))))))))) - alist) + (reverse alist)) parameter-list)) ;;@args rdb command-table diff --git a/jscheme.init b/jscheme.init index 88c1623..95caa8d 100644 --- a/jscheme.init +++ b/jscheme.init @@ -21,11 +21,10 @@ ;;@ (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -;; (define (software-type) 'UNIX) (define (software-type) (if (.startsWith (System.getProperty "os.name") "Windows") - 'MS-DOS - 'UNIX)) + 'ms-dos + 'unix)) ;;@ (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -45,7 +44,7 @@ ;;; implementation reside. (define implementation-vicinity (let ((implvic (case (software-type) - ((MS-DOS) "C:\\TEMP\\") + ((ms-dos) "C:\\TEMP\\") (else "/tmp/")))) (lambda () implvic))) @@ -72,9 +71,9 @@ ;; Use this path if your scheme does not support GETENV ;; or if SCHEME_LIBRARY_PATH is not set. (case (software-type) - ((UNIX) "/usr/local/lib/slib/") - ((VMS) "lib$scheme:") - ((MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/local/lib/slib/") + ((vms) "lib$scheme:") + ((ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -85,7 +84,7 @@ (define home (or (getenv "HOME") (getenv "user.home"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -95,7 +94,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -103,12 +102,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -127,7 +126,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -137,10 +136,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ diff --git a/limit.scm b/limit.scm new file mode 100644 index 0000000..8c67e8f --- /dev/null +++ b/limit.scm @@ -0,0 +1,129 @@ +;;; "limit.scm" Scheme Implementation of one-side limit algorithm. +;Copyright 2005 Aubrey Jaffer +; +;Permission to copy this software, to modify it, to redistribute it, +;to distribute modified versions, and to use it for any purpose is +;granted, subject to the following restrictions and understandings. +; +;1. Any copy made of this software must include this copyright notice +;in full. +; +;2. I have made no warranty or representation that the operation of +;this software will be error-free, and I am under no obligation to +;provide any services, by way of maintenance, update, or otherwise. +; +;3. In conjunction with products arising from the use of this +;material, there shall be no use of my name in any advertising, +;promotional, or sales literature without prior written consent in +;each case. + +;;@code{(require 'limit)} + +(define (inv-root f1 f2 f3 prec) + (define f1^2 (* f1 f1)) + (define f2^2 (* f2 f2)) + (define f3^2 (expt f3 2)) + (require 'root) ; SLIB + (newton:find-root (lambda (f0) + (+ (- (* (expt f0 2) f1)) + (* f0 f1^2) + (* (- (* 2 (expt f0 2)) (* 3 f1^2)) f2) + (* (+ (- (* 2 f0)) (* 3 f1)) f2^2) + (* (- (+ (- (expt f0 2)) (* 2 f1^2)) f2^2) + f3) + (* (+ (- f0 (* 2 f1)) f2) f3^2))) + (lambda (f0) + (+ (- (+ (* -2 f0 f1) f1^2 (* 4 f0 f2)) + (* 2 f2^2) + (* 2 f0 f3)) + f3^2)) + f1 + prec)) + +(define (invintp f1 f2 f3) + (define f1^2 (* f1 f1)) + (define f2^2 (* f2 f2)) + (define f3^2 (expt f3 2)) + (let ((c (+ (* -3 f1^2 f2) + (* 3 f1 f2^2) + (* (- (* 2 f1^2) f2^2) f3) + (* (- f2 (* 2 f1)) f3^2))) + (b (+ (- f1^2 (* 2 f2^2)) f3^2)) + (a (- (* 2 f2) f1 f3))) + (define disc (- (* b b) (* 4 a c))) + ;;(printf "discriminant: %g\n" disc) + (if (negative? (real-part disc)) + (/ b -2 a) + (let ((sqrt-disc (sqrt disc))) + (define root+ (/ (- sqrt-disc b) 2 a)) + (define root- (/ (+ sqrt-disc b) -2 a)) + (if (< (magnitude (- root+ f1)) (magnitude (- root- f1))) + root+ + root-))))) + +(define (extrapolate-0 fs) + (define n (length fs)) + (define (choose n k) + (do ((kdx 1 (+ 1 kdx)) + (prd 1 (/ (* (- n kdx -1) prd) kdx))) + ((> kdx k) prd))) + (do ((k 1 (+ 1 k)) + (lst fs (cdr lst)) + (L 0 (+ (* -1 (expt -1 k) (choose n k) (car lst)) L))) + ((null? lst) L))) + +(define (sequence->limit proc sequence) + (define lval (proc (car sequence))) + (if (finite? lval) + (let ((val (proc (cadr sequence)))) + (define h_n*nsamps (* (length sequence) (magnitude (- val lval)))) + (if (finite? val) + (let loop ((sequence (cddr sequence)) + (fxs (list val lval)) + (trend #f) + (ldelta (- val lval)) + (jdx (+ -1 (length sequence)))) + (cond ((null? sequence) + (case trend + ((diverging) (and (real? val) (/ ldelta 0.0))) + ((bounded) (invintp val lval (caddr fxs))) + (else (cond ((zero? ldelta) val) + ((not (real? val)) #f) + (else (extrapolate-0 fxs)))))) + (else + (set! lval val) + (set! val (proc (car sequence))) + ;;(printf "f(%12g)=%12g; delta=%12g hyp=%12g j=%3d %s\n" (car sequence) val (- val lval) (/ h_n*nsamps jdx) jdx (or trend "")) + (if (finite? val) + (let ((delta (- val lval))) + (define h_j (/ h_n*nsamps jdx)) + (cond ((case trend + ((converging) (<= (magnitude delta) h_j)) + ((bounded) (<= (magnitude ldelta) (magnitude delta))) + ((diverging) (>= (magnitude delta) h_j)) + (else #f)) + (loop (cdr sequence) (cons val fxs) trend delta (+ -1 jdx))) + (trend #f) + (else + (loop (cdr sequence) (cons val fxs) + (cond ((> (magnitude delta) h_j) 'diverging) + ((< (magnitude ldelta) (magnitude delta)) 'bounded) + (else 'converging)) + delta (+ -1 jdx))))) + (and (eq? trend 'diverging) val))))) + (and (real? val) val))) + (and (real? lval) lval))) + +(define (limit proc x1 x2 . k) + (set! k (if (null? k) 8 (car k))) + (cond ((not (finite? x2)) (slib:error 'limit 'infinite 'x2 x2)) + ((not (finite? x1)) + (or (positive? (* x1 x2)) (slib:error 'limit 'start 'mismatch x1 x2)) + (limit (lambda (x) (proc (/ x))) 0.0 (/ x2) k)) + ((= x1 (+ x1 x2)) (slib:error 'limit 'null 'range x1 (+ x1 x2))) + (else (let ((dec (/ x2 k))) + (do ((x (+ x1 x2 0.0) (- x dec)) + (cnt (+ -1 k) (+ -1 cnt)) + (lst '() (cons x lst))) + ((negative? cnt) + (sequence->limit proc (reverse lst)))))))) diff --git a/limit.texi b/limit.texi new file mode 100644 index 0000000..ee1f416 --- /dev/null +++ b/limit.texi @@ -0,0 +1,100 @@ + +@deffn {library procedure} limit proc x1 x2 k +@deffnx {library procedure} limit proc x1 x2 + +@var{Proc} must be a procedure taking a single inexact real argument. +@var{K} is the number of points on which @var{proc} will be called; it +defaults to 8. + +If @var{x1} is finite, then @var{Proc} must be continuous on the +half-open interval: + + ( @var{x1} .. @var{x1}+@var{x2} ] + +And @var{x2} should be chosen small enough so that @var{proc} is +expected to be monotonic or constant on arguments between @var{x1} and +@var{x1} + @var{x2}. + +@code{Limit} computes the limit of @var{proc} as its argument +approaches @var{x1} from @var{x1} + @var{x2}. +@code{Limit} returns a real number or real infinity or @samp{#f}. + +If @var{x1} is not finite, then @var{x2} must be a finite nonzero real +with the same sign as @var{x1}; in which case @code{limit} returns: + +@code{(limit (lambda (x) (proc (/ x))) 0.0 (/ @var{x2}) @var{k})} + +@code{Limit} examines the magnitudes of the differences between +successive values returned by @var{proc} called with a succession of +numbers from @var{x1}+@var{x2}/@var{k} to @var{x1}. + +If the magnitudes of differences are monotonically decreasing, then +then the limit is extrapolated from the degree n polynomial passing +through the samples returned by @var{proc}. + +If the magnitudes of differences are increasing as fast or faster than +a hyperbola matching at @var{x1}+@var{x2}, then a real infinity with +sign the same as the differences is returned. + +If the magnitudes of differences are increasing more slowly than the +hyperbola matching at @var{x1}+@var{x2}, then the limit is +extrapolated from the quadratic passing through the three samples +closest to @var{x1}. + +If the magnitudes of differences are not monotonic or are not +completely within one of the above categories, then #f is returned. +@end deffn + +@example +;; constant +(limit (lambda (x) (/ x x)) 0 1.0e-9) ==> 1.0 +(limit (lambda (x) (expt 0 x)) 0 1.0e-9) ==> 0.0 +(limit (lambda (x) (expt 0 x)) 0 -1.0e-9) ==> +inf.0 +;; linear +(limit + 0 976.5625e-6) ==> 0.0 +(limit - 0 976.5625e-6) ==> 0.0 +;; vertical point of inflection +(limit sqrt 0 1.0e-18) ==> 0.0 +(limit (lambda (x) (* x (log x))) 0 1.0e-9) ==> -102.70578127633066e-12 +(limit (lambda (x) (/ x (log x))) 0 1.0e-9) ==> 96.12123142321669e-15 +;; limits tending to infinity +(limit + +inf.0 1.0e9) ==> +inf.0 +(limit + -inf.0 -1.0e9) ==> -inf.0 +(limit / 0 1.0e-9) ==> +inf.0 +(limit / 0 -1.0e-9) ==> -inf.0 +(limit (lambda (x) (/ (log x) x)) 0 1.0e-9) ==> -inf.0 +(limit (lambda (x) (/ (magnitude (log x)) x)) 0 -1.0e-9) + ==> -inf.0 +;; limit doesn't exist +(limit sin +inf.0 1.0e9) ==> #f +(limit (lambda (x) (sin (/ x))) 0 1.0e-9) ==> #f +(limit (lambda (x) (sin (/ x))) 0 -1.0e-9) ==> #f +(limit (lambda (x) (/ (log x) x)) 0 -1.0e-9) ==> #f +;; conditionally convergent - return #f +(limit (lambda (x) (/ (sin x) x)) +inf.0 1.0e222) + ==> #f +;; asymptotes +(limit / -inf.0 -1.0e222) ==> 0.0 +(limit / +inf.0 1.0e222) ==> 0.0 +(limit (lambda (x) (expt x x)) 0 1.0e-18) ==> 1.0 +(limit (lambda (x) (sin (/ x))) +inf.0 1.0e222) ==> 0.0 +(limit (lambda (x) (/ (+ (exp (/ x)) 1))) 0 1.0e-9) + ==> 0.0 +(limit (lambda (x) (/ (+ (exp (/ x)) 1))) 0 -1.0e-9) + ==> 1.0 +(limit (lambda (x) (real-part (expt (tan x) (cos x)))) (/ pi 2) 1.0e-9) + ==> 1.0 +;; This example from the 1979 Macsyma manual grows so rapidly +;; that x2 must be less than 41. It correctly returns e^2. +(limit (lambda (x) (expt (+ x (exp x) (exp (* 2 x))) (/ x))) +inf.0 40) + ==> 7.3890560989306504 +;; LIMIT can calculate the proper answer when evaluation +;; of the function at the limit point does not: +(tan (atan +inf.0)) ==> 16.331778728383844e15 +(limit tan (atan +inf.0) -1.0e-15) ==> +inf.0 +(tan (atan +inf.0)) ==> 16.331778728383844e15 +(limit tan (atan +inf.0) 1.0e-15) ==> -inf.0 +((lambda (x) (expt (exp (/ -1 x)) x)) 0) ==> 1.0 +(limit (lambda (x) (expt (exp (/ -1 x)) x)) 0 1.0e-9) + ==> 0.0 +@end example @@ -75,6 +75,11 @@ ;;a temporary file. @0 calls @code{system} with @1 as argument, ;;redirecting stdout to file @2. @0 returns a string containing the ;;first line of output from @2. +;; +;;@0 is intended to be a portable method for getting one-line results +;;from programs like @code{pwd}, @code{whoami}, @code{hostname}, +;;@code{which}, @code{identify}, and @code{cksum}. Its behavior when +;;called with programs which generate lots of output is unspecified. (define (system->line command . tmp) (require 'filename) (cond ((null? tmp) @@ -46,5 +46,10 @@ which case it defaults to the value returned by a temporary file. @code{system->line} calls @code{system} with @var{command} as argument, redirecting stdout to file @var{tmp}. @code{system->line} returns a string containing the first line of output from @var{tmp}. + +@code{system->line} is intended to be a portable method for getting one-line results +from programs like @code{pwd}, @code{whoami}, @code{hostname}, +@code{which}, @code{identify}, and @code{cksum}. Its behavior when +called with programs which generate lots of output is unspecified. @end defun diff --git a/linterp.scm b/linterp.scm new file mode 100644 index 0000000..5be2b36 --- /dev/null +++ b/linterp.scm @@ -0,0 +1,90 @@ +;;; "linterp.scm" Interpolate array access. +;Copyright 2005 Aubrey Jaffer +; +;Permission to copy this software, to modify it, to redistribute it, +;to distribute modified versions, and to use it for any purpose is +;granted, subject to the following restrictions and understandings. +; +;1. Any copy made of this software must include this copyright notice +;in full. +; +;2. I have made no warranty or representation that the operation of +;this software will be error-free, and I am under no obligation to +;provide any services, by way of maintenance, update, or otherwise. +; +;3. In conjunction with products arising from the use of this +;material, there shall be no use of my name in any advertising, +;promotional, or sales literature without prior written consent in +;each case. + +;;@code{(require 'array-interpolate)} + +(require 'array) +(require 'subarray) +(require 'array-for-each) + +;;@args ra x1 ... xj +;; +;;@1 must be an array of rank j containing numbers. @0 returns a +;;value interpolated from the nearest j-dimensional cube of elements +;;of @1. +;; +;;@example +;;(interpolate-array-ref '#2A:fixZ32b((1 2 3) (4 5 6)) 1 0.1) +;; ==> 4.1 +;;(interpolate-array-ref '#2A:fixZ32b((1 2 3) (4 5 6)) 0.5 0.25) +;; ==> 2.75 +;;@end example +(define (interpolate-array-ref ra . xs) + (define (mix rat x1 x2) (+ (* (- 1 rat) x1) (* rat x2))) + (define (iar ra xs dims) + (define x1 (car xs)) + (define b1 (car dims)) + (define idx (inexact->exact (floor (car xs)))) + (define dim-1 (+ -1 (car dims))) + (set! xs (cdr xs)) + (set! dims (cdr dims)) + (cond ((<= x1 0) (if (null? xs) + (array-ref ra 0) + (iar (subarray ra idx) xs dims))) + ((>= x1 dim-1) (if (null? xs) + (array-ref ra dim-1) + (iar (subarray ra dim-1) xs dims))) + ((integer? x1) (if (null? xs) + (array-ref ra idx) + (iar (subarray ra idx) xs dims))) + ((null? xs) (mix (- x1 idx) + (array-ref ra idx) + (array-ref ra (+ 1 idx)))) + (else (mix (- x1 idx) + (iar (subarray ra idx) xs dims) + (iar (subarray ra (+ 1 idx)) xs dims))))) + (if (null? xs) + (array-ref ra) + (iar ra xs (array-dimensions ra)))) + +;;@args ra1 ra2 +;; +;;@1 and @2 must be numeric arrays of equal rank. @0 sets @1 to +;;values interpolated from @2 such that the values of elements at the +;;corners of @1 and @2 are equal. +;; +;;@example +;;(define ra (make-array (A:fixZ32b) 2 2)) +;;(resample-array! ra '#2A:fixZ32b((1 2 3) (4 5 6))) +;;ra ==> #2A:fixZ32b((1 3) (4 6)) +;;(define ra (make-array (A:floR64b) 3 2)) +;;(resample-array! ra '#2A:fixZ32b((1 2 3) (4 5 6))) +;;ra ==> #2A:floR64b((1.0 3.0) (2.5 4.5) (4.0 6.0)) +;;@end example +(define (resample-array! ra1 ra2) + (define scales (map (lambda (rd1 rd2) + (if (<= rd1 1) + 0 + (/ (+ -1 rd2) (+ -1 rd1)))) + (array-dimensions ra1) + (array-dimensions ra2))) + (array-index-map! ra1 + (lambda idxs + (apply interpolate-array-ref ra2 + (map * scales idxs))))) diff --git a/linterp.txi b/linterp.txi new file mode 100644 index 0000000..14861f6 --- /dev/null +++ b/linterp.txi @@ -0,0 +1,36 @@ +@code{(require 'array-interpolate)} + + +@defun interpolate-array-ref ra x1 @dots{} xj + + +@var{ra} must be an array of rank j containing numbers. @code{interpolate-array-ref} returns a +value interpolated from the nearest j-dimensional cube of elements +of @var{ra}. + +@example +(interpolate-array-ref '#2A:fixZ32b((1 2 3) (4 5 6)) 1 0.1) + ==> 4.1 +(interpolate-array-ref '#2A:fixZ32b((1 2 3) (4 5 6)) 0.5 0.25) + ==> 2.75 +@end example +@end defun + + +@deffn {Procedure} resample-array! ra1 ra2 + + +@var{ra1} and @var{ra2} must be numeric arrays of equal rank. @code{resample-array!} sets @var{ra1} to +values interpolated from @var{ra2} such that the values of elements at the +corners of @var{ra1} and @var{ra2} are equal. + +@example +(define ra (make-array (A:fixZ32b) 2 2)) +(resample-array! ra '#2A:fixZ32b((1 2 3) (4 5 6))) +ra ==> #2A:fixZ32b((1 3) (4 6)) +(define ra (make-array (A:floR64b) 3 2)) +(resample-array! ra '#2A:fixZ32b((1 2 3) (4 5 6))) +ra ==> #2A:floR64b((1.0 3.0) (2.5 4.5) (4.0 6.0)) +@end example +@end deffn + diff --git a/macscheme.init b/macscheme.init index 60ee387..8edfc00 100644 --- a/macscheme.init +++ b/macscheme.init @@ -7,7 +7,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'MACOS) +(define (software-type) 'macos) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -40,7 +40,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -48,12 +48,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -72,7 +72,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -82,10 +82,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -343,7 +343,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/matfile.scm b/matfile.scm index a7a96a6..49c603b 100644 --- a/matfile.scm +++ b/matfile.scm @@ -122,7 +122,8 @@ (else (slib:error 'p 'type d-prot))) mrows ncols)) ((text) (make-array "." mrows ncols)) - ((sparse) (slib:error 'sparse '?))))) + ((sparse) (slib:error 'sparse '?)))) + (d-endn*leng (* -1 d-endn d-leng))) (do ((idx 0 (+ 1 idx))) ((>= idx namlen)) (string-set! namstr idx (read-char port))) @@ -133,7 +134,7 @@ ((>= jdx ncols)) (do ((idx 0 (+ 1 idx))) ((>= idx mrows)) - (array-set! mat (d-conv (read-bytes (* d-endn d-leng) port)) + (array-set! mat (d-conv (read-bytes d-endn*leng port)) idx jdx))) (if imagf (do ((jdx 0 (+ 1 jdx))) @@ -141,7 +142,7 @@ (do ((idx 0 (+ 1 idx))) ((>= idx mrows)) (array-set! mat - (+ (* (d-conv (read-bytes (* d-endn d-leng) port)) + (+ (* (d-conv (read-bytes d-endn*leng port)) +i) (array-ref mat idx jdx)) idx jdx)))) diff --git a/mitscheme.init b/mitscheme.init index 9768155..6283230 100644 --- a/mitscheme.init +++ b/mitscheme.init @@ -9,7 +9,7 @@ ;;; (software-type) should be set to the generic operating system type. (define (software-type) - (if (eq? 'unix microcode-id/operating-system) 'UNIX 'MS-DOS)) + (if (eq? 'unix microcode-id/operating-system) 'unix 'ms-dos)) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -56,8 +56,8 @@ (or (getenv "SCHEME_LIBRARY_PATH") ;; Use this path if your scheme does not support GETENV. (case (software-type) - ((MS-DOS) "c:\\slib\\") - ((UNIX) "/usr/local/lib/slib/") + ((ms-dos) "c:\\slib\\") + ((unix) "/usr/local/lib/slib/") (else ""))))) (lambda () library-path))) @@ -72,7 +72,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -80,12 +80,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -104,7 +104,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -114,10 +114,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ diff --git a/mkclrnam.scm b/mkclrnam.scm index 3e0c553..3360a41 100644 --- a/mkclrnam.scm +++ b/mkclrnam.scm @@ -60,7 +60,7 @@ (require 'filename) (call-with-tmpnam (lambda (file) - (system (string-append "wget -c -O" file " -USLIB" *SLIB-VERSION* " " url)) + (system (string-append "wget -c -O" file " -USLIB" *slib-version* " " url)) (apply file->color-dictionary file table-name rdb)))) (define (load-rgb-txt path color-table) diff --git a/mklibcat.scm b/mklibcat.scm index 2047f86..d26c821 100644 --- a/mklibcat.scm +++ b/mklibcat.scm @@ -80,6 +80,7 @@ (modular "modular") (factor "factor") (primes factor) + (limit "limit") (eps-graph "grapheps") (charplot "charplot") (sort "sort") @@ -133,6 +134,7 @@ (array "array") (subarray "subarray") (array-for-each "arraymap") + (array-interpolate "linterp") (repl "repl") (process "process") (chapter-order "chap") @@ -208,17 +210,22 @@ (srfi-0 srfi) (srfi defmacro "srfi") (srfi-1 "srfi-1") + (and-let* srfi-2) (srfi-2 defmacro "srfi-2") + (receive srfi-8) (srfi-8 macro "srfi-8") + (define-record-type srfi-9) (srfi-9 macro "srfi-9") (srfi-47 array) (srfi-63 array) (srfi-60 logical) + (guarded-cond-clause srfi-61) + (srfi-61 macro "srfi-61") (new-catalog "mklibcat") )))) (let* ((req (in-vicinity (library-vicinity) (string-append "require" (scheme-file-suffix))))) - (write* (cons '*SLIB-VERSION* (or (slib:version req) *SLIB-VERSION*)))) + (write* (cons '*slib-version* (or (slib:version req) *slib-version*)))) (display* ")") (let ((load-if-exists diff --git a/peanosfc.scm b/peanosfc.scm index 4a4039a..5cac088 100644 --- a/peanosfc.scm +++ b/peanosfc.scm @@ -19,17 +19,20 @@ (require 'array) +;;@code{(require 'peano-fill)} +;;@ftindex peano-fill + ;;; A. R. Butz. ;;; Space filling curves and mathematical programming. ;;; Information and Control, 12:314-330, 1968. -(define (integer->tet-array scalar rank) +(define (natural->tet-array scalar rank) (do ((tets '() (cons (modulo scl 3) tets)) (scl scalar (quotient scl 3))) ((zero? scl) (let* ((len (length tets)) (depth (quotient (+ len rank -1) rank))) - (define tra (make-array (A:fixN8b 0) rank depth)) + (define tra (make-array (A:fixZ8b 0) rank depth)) (set! tets (reverse tets)) (do ((idx (+ -1 depth) (+ -1 idx))) ((negative? idx)) @@ -40,7 +43,7 @@ (set! tets (cdr tets)))))) tra)))) -(define (tet-array->integer tra) +(define (tet-array->natural tra) (define rank (car (array-dimensions tra))) (define depth (cadr (array-dimensions tra))) (define val 0) @@ -88,22 +91,54 @@ (do ((idx (+ -1 idx) (+ -1 idx))) ((negative? idx)) (set! tpar (+ (array-ref tra rdx idx) tpar))) - (array-set! tra (if (odd? tpar) (- 2 v_ij) v_ij) rdx idx) + (if (odd? tpar) (array-set! tra (- 2 v_ij) rdx idx)) (set! parity (modulo (+ parity v_ij) 2)))))) ;;@body ;;Returns a list of @2 nonnegative integer coordinates corresponding ;;to exact nonnegative integer @1. The lists returned by @0 for @1 ;;arguments 0 and 1 will differ in the first element. -(define (integer->peano-coordinates scalar rank) - (define tra (integer->tet-array scalar rank)) +(define (natural->peano-coordinates scalar rank) + (define tra (natural->tet-array scalar rank)) (peano-flip! tra) (tet-array->coordinates tra)) ;;@body ;;Returns an exact nonnegative integer corresponding to @1, a list of ;;nonnegative integer coordinates. -(define (peano-coordinates->integer coords) +(define (peano-coordinates->natural coords) (define tra (coordinates->tet-array coords)) (peano-flip! tra) - (tet-array->integer tra)) + (tet-array->natural tra)) + +;;@body +;;Returns a list of @2 integer coordinates corresponding to exact +;;integer @1. The lists returned by @0 for @1 arguments 0 and 1 will +;;differ in the first element. +(define (integer->peano-coordinates scalar rank) + (define three^rank (expt 3 rank)) + (do ((edx 1 (* edx three^rank)) + (m 0 (+ 1 m))) + ((>= (quotient edx 2) (abs scalar)) + (let ((tra (natural->tet-array (+ scalar (quotient edx 2)) rank)) + (offset (quotient (expt 3 m) 2))) + (peano-flip! tra) + (map (lambda (k) (* (if (odd? m) -1 1) (- k offset))) + (tet-array->coordinates tra)))))) + +;;@body +;;Returns an exact integer corresponding to @1, a list of integer +;;coordinates. +(define (peano-coordinates->integer coords) + (define cobs (apply max (map abs coords))) + (let loop ((xpo 1)) + (define offset (quotient (expt 3 xpo) 2)) + (if (>= offset cobs) + (let ((tra (coordinates->tet-array + (map (lambda (elt) (+ elt offset)) + coords)))) + (peano-flip! tra) + ((if (odd? xpo) - +) + (- (tet-array->natural tra) + (quotient (expt 3 (* (length coords) xpo)) 2)))) + (loop (+ 1 xpo))))) diff --git a/peanosfc.txi b/peanosfc.txi index 10cc256..5550ebb 100644 --- a/peanosfc.txi +++ b/peanosfc.txi @@ -1,15 +1,33 @@ +@code{(require 'peano-fill)} +@ftindex peano-fill -@defun integer->peano-coordinates scalar rank + +@defun natural->peano-coordinates scalar rank Returns a list of @var{rank} nonnegative integer coordinates corresponding -to exact nonnegative integer @var{scalar}. The lists returned by @code{integer->peano-coordinates} for @var{scalar} +to exact nonnegative integer @var{scalar}. The lists returned by @code{natural->peano-coordinates} for @var{scalar} arguments 0 and 1 will differ in the first element. @end defun -@defun peano-coordinates->integer coords +@defun peano-coordinates->natural coords Returns an exact nonnegative integer corresponding to @var{coords}, a list of nonnegative integer coordinates. @end defun + +@defun integer->peano-coordinates scalar rank + +Returns a list of @var{rank} integer coordinates corresponding to exact +integer @var{scalar}. The lists returned by @code{integer->peano-coordinates} for @var{scalar} arguments 0 and 1 will +differ in the first element. +@end defun + + +@defun peano-coordinates->integer coords + +Returns an exact integer corresponding to @var{coords}, a list of integer +coordinates. +@end defun + diff --git a/phil-spc.scm b/phil-spc.scm index 65863da..ec0bc0f 100644 --- a/phil-spc.scm +++ b/phil-spc.scm @@ -1,5 +1,5 @@ ; "phil-spc.scm": Hilbert space filling mapping -; Copyright (C) 2003 Aubrey Jaffer +; Copyright (C) 2003, 2005 Aubrey Jaffer ; ;Permission to copy this software, to modify it, to redistribute it, ;to distribute modified versions, and to use it for any purpose is @@ -95,21 +95,28 @@ ;;of non-negative integer coordinates. (define (hilbert-coordinates->integer coords . nbits) (define rank (length coords)) - (let ((lst (delaminate-list rank (map integer->gray-code coords))) - (rnkhib (ash 1 (+ -1 rank)))) - (define (loop lst rotation flipbit scalar) - (if (null? lst) - (gray-code->integer scalar) - (let ((chnk (rotate-bit-field (logxor flipbit (car lst)) - (- rotation) 0 rank))) - (loop (cdr lst) - (modulo (+ (log2-binary-factors chnk) 2 rotation) rank) - (ash 1 rotation) - (logior (logxor rnkhib chnk) (ash scalar rank)))))) - (loop (cdr lst) - (modulo (+ (log2-binary-factors (car lst)) 2) rank) - 1 - (car lst)))) + (set! nbits (if (null? nbits) + (* (quotient (+ -1 rank (integer-length (apply max coords))) + rank) + rank) + (car nbits))) + (if (zero? nbits) + 0 + (let ((lst (delaminate-list nbits (map integer->gray-code coords))) + (rnkhib (ash 1 (+ -1 rank)))) + (define (loop lst rotation flipbit scalar) + (if (null? lst) + (gray-code->integer scalar) + (let ((chnk (rotate-bit-field (logxor flipbit (car lst)) + (- rotation) 0 rank))) + (loop (cdr lst) + (modulo (+ (log2-binary-factors chnk) 2 rotation) rank) + (ash 1 rotation) + (logior (logxor rnkhib chnk) (ash scalar rank)))))) + (loop (cdr lst) + (modulo (+ (log2-binary-factors (car lst)) 2) rank) + 1 + (car lst))))) ;;@subsubsection Gray code ;; @@ -183,44 +190,6 @@ ;;@subsubsection Bitwise Lamination ;;@cindex lamination -;;@args k1 @dots{} -;;Returns an integer composed of the bits of @var{k1} @dots{} interlaced -;;in argument order. Given @var{k1}, @dots{} @var{kn}, the n low-order -;;bits of the returned value will be the lowest-order bit of each -;;argument. -;; -;;@args count k -;;Returns a list of @var{count} integers comprised of every @var{count}h -;;bit of the integer @var{k}. -;; -;;@example -;;(map (lambda (k) (number->string k 2)) -;; (bitwise-delaminate 4 #x7654)) -;; @result{} ("0" "1111" "1100" "1010") -;;(number->string (bitwise-laminate 0 #b1111 #b1100 #b1010) 16) -;; @result{} "7654" -;@end example -;; -;;For any non-negative integers @var{k} and @var{count}: -;;@example -;;(eqv? k (bitwise-laminate (bitwise-delaminate count k))) -;;@end example -(define (bitwise-laminate . ks) - (define nks (length ks)) - (define nbs (apply max (map integer-length ks))) - (do ((kdx (+ -1 nbs) (+ -1 kdx)) - (ibs 0 (+ (list->integer (map (lambda (k) (logbit? kdx k)) ks)) - (arithmetic-shift ibs nks)))) - ((negative? kdx) ibs))) -(define (bitwise-delaminate count k) - (define nbs (* count (+ 1 (quotient (integer-length k) count)))) - (do ((kdx (- nbs count) (- kdx count)) - (lst (vector->list (make-vector count 0)) - (map (lambda (k bool) (+ (if bool 1 0) (arithmetic-shift k 1))) - lst - (integer->list (arithmetic-shift k (- kdx)) count)))) - ((negative? kdx) lst))) - ;;@body ;; ;;Returns a list of @var{count} integers comprised of the @var{j}th diff --git a/phil-spc.txi b/phil-spc.txi index ac1743c..62b1bae 100644 --- a/phil-spc.txi +++ b/phil-spc.txi @@ -110,34 +110,6 @@ corresponding predicate of @var{k1} and @var{k2}. @cindex lamination -@defun bitwise-laminate k1 @dots{} -@defunx bitwise-delaminate count k - -Returns an integer composed of the bits of @var{k1} @dots{} interlaced -in argument order. Given @var{k1}, @dots{} @var{kn}, the n low-order -bits of the returned value will be the lowest-order bit of each -argument. - - -@defunx bitwise-laminate count k -Returns a list of @var{count} integers comprised of every @var{count}h -bit of the integer @var{k}. - -@example -(map (lambda (k) (number->string k 2)) - (bitwise-delaminate 4 #x7654)) - @result{} ("0" "1111" "1100" "1010") -(number->string (bitwise-laminate 0 #b1111 #b1100 #b1010) 16) - @result{} "7654" -@end example - -For any non-negative integers @var{k} and @var{count}: -@example -(eqv? k (bitwise-laminate (bitwise-delaminate count k))) -@end example -@end defun - - @defun delaminate-list count ks @@ -432,7 +432,7 @@ ;;; On MS-DOS systems, <ctrl>-Z (26) needs to be ignored in order to ;;; avoid problems at end of files. (case (software-type) - ((MS-DOS) + ((ms-dos) (if (not (char-whitespace? (integer->char 26))) (prec:define-grammar (tok:char-group 0 (integer->char 26) #f)) ))) diff --git a/pscheme.init b/pscheme.init index a4012d2..bc7a5e5 100644 --- a/pscheme.init +++ b/pscheme.init @@ -30,7 +30,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -38,12 +38,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -62,7 +62,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -72,10 +72,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -316,7 +316,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/require.scm b/require.scm index ec97d7a..c8e8711 100644 --- a/require.scm +++ b/require.scm @@ -17,7 +17,7 @@ ;promotional, or sales literature without prior written consent in ;each case. ;@ -(define *SLIB-VERSION* "3a2") +(define *slib-version* "3a3") ;;;; MODULES ;@ @@ -28,11 +28,11 @@ (let ((expr (and (file-exists? path) (call-with-input-file path (lambda (port) (read port)))))) (and (list? expr) (= 3 (length expr)) - (eq? (car expr) 'define) (eq? (cadr expr) '*SLIB-VERSION*) + (eq? (car expr) 'define) (eq? (cadr expr) '*slib-version*) (string? (caddr expr)) (caddr expr)))) (define (catalog/require-version-match? slibcat) - (let* ((apair (assq '*SLIB-VERSION* slibcat)) + (let* ((apair (assq '*slib-version* slibcat)) (req (in-vicinity (library-vicinity) (string-append "require" (scheme-file-suffix)))) (reqvers (slib:version req))) @@ -40,7 +40,7 @@ (slib:warn "can't find " req) #f) ((not apair) #f) ((not (equal? reqvers (cdr apair))) #f) - ((not (equal? reqvers *SLIB-VERSION*)) + ((not (equal? reqvers *slib-version*)) (slib:warn "The loaded " req " is stale.") #t) (else #t)))) @@ -245,7 +245,7 @@ (define slib:report-version (lambda () (report:print - 'SLIB *SLIB-VERSION* 'on (scheme-implementation-type) + 'SLIB *slib-version* 'on (scheme-implementation-type) (scheme-implementation-version) 'on (software-type)))) (define slib:report-locations @@ -40,11 +40,31 @@ (next-fx (f next-x))) (cond ((>= (abs next-fx) (abs fx)) x) (else (loop next-x next-fx))))))))))) + +;;(define (integer-sqrt y) +;; (newton:find-integer-root (lambda (x) (- (* x x) y)) +;; (lambda (x) (* 2 x)) +;; (ash 1 (quotient (integer-length y) 2)))) + +;;;; http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/lisp/code/math/isqrt/isqrt.txt +;;; Akira Kurihara +;;; School of Mathematics +;;; Japan Women's University ;@ -(define (integer-sqrt y) - (newton:find-integer-root (lambda (x) (- (* x x) y)) - (lambda (x) (* 2 x)) - (ash 1 (quotient (integer-length y) 2)))) +(define (integer-sqrt n) + (cond ((> n 24) (let* ((length/4 (quotient (- (integer-length n) 1) 4)) + (sqrt-top (integer-sqrt (ash n (* -2 length/4)))) + (init-value (ash sqrt-top length/4)) + (q (quotient n init-value)) + (iterated-value (quotient (+ init-value q) 2))) + (if (odd? q) iterated-value + (let ((m (- iterated-value init-value))) + (if (< (remainder n init-value) (* m m)) + (- iterated-value 1) + iterated-value))))) + ((> n 15) 4) ((> n 8) 3) ((> n 3) 2) ((> n 0) 1) ((> n -1) 0) + (else (slib:error 'integer-sqrt n)))) + ;@ (define (newton:find-root f df/dx x_0 prec) (if (and (negative? prec) (integer? prec)) diff --git a/scheme2c.init b/scheme2c.init index 057dc76..1bfbde4 100644 --- a/scheme2c.init +++ b/scheme2c.init @@ -13,7 +13,7 @@ ;; Of course, if you make serious use of library functions you'll want ;; to compile them and use Scheme->C modules. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -31,18 +31,18 @@ (define (implementation-vicinity) (case (software-type) - ((UNIX) "/usr/local/lib/scheme/") - ((VMS) "scheme$src:") - ((MS-DOS) "C:\\scheme\\"))) + ((unix) "/usr/local/lib/scheme/") + ((vms) "scheme$src:") + ((ms-dos) "C:\\scheme\\"))) ;;; (library-vicinity) should be defined to be the pathname of the ;;; directory where files of Scheme library functions reside. (define library-vicinity (let ((library-path (case (software-type) - ((UNIX) "/usr/local/lib/slib/") - ((VMS) "lib$scheme:") - ((MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/local/lib/slib/") + ((vms) "lib$scheme:") + ((ms-dos) "C:\\SLIB\\") (else "")))) (lambda () library-path))) @@ -53,7 +53,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -63,7 +63,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -71,12 +71,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -95,7 +95,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -105,10 +105,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -229,13 +229,13 @@ ;;; (FILE-EXISTS? <string>) (define (file-exists? f) (case (software-type) - ((UNIX) (zero? (system (string-append "test -f " f)))) + ((unix) (zero? (system (string-append "test -f " f)))) (else (slib:error "FILE-EXISTS? not defined for " software-type)))) ;;; (DELETE-FILE <string>) (define (delete-file f) (case (software-type) - ((UNIX) (zero? (system (string-append "rm " f)))) + ((unix) (zero? (system (string-append "rm " f)))) (else (slib:error "DELETE-FILE not defined for " software-type)))) ;;; FORCE-OUTPUT flushes any pending output on optional arg output port @@ -400,7 +400,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/scheme48.init b/scheme48.init index 8f91d54..0a91cf9 100644 --- a/scheme48.init +++ b/scheme48.init @@ -52,7 +52,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -100,7 +100,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -108,12 +108,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -132,7 +132,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -142,10 +142,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -422,7 +422,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (case (software-type) - ((NOSVE) (lambda () "_scm")) + ((nosve) (lambda () "_scm")) (else (lambda () ".scm")))) ;;; (SLIB:LOAD-SOURCE "foo") should load "foo.scm" or with whatever @@ -487,5 +487,5 @@ ,collect ,batch off -,dump slib.image "(slib 3a2)" +,dump slib.image "(slib 3a3)" ,exit @@ -5,7 +5,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -39,7 +39,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -49,7 +49,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -57,12 +57,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -81,7 +81,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -91,10 +91,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -345,7 +345,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) @@ -1,4 +1,4 @@ -This is slib.info, produced by makeinfo version 4.7 from slib.texi. | +This is slib.info, produced by makeinfo version 4.7 from slib.texi. INFO-DIR-SECTION The Algorithmic Language Scheme START-INFO-DIR-ENTRY @@ -50,8 +50,8 @@ implementation, user, or directory. File: slib.info, Node: The Library System, Next: Universal SLIB Procedures, Prev: Top, Up: Top -1 The Library System | -******************** | +1 The Library System +******************** * Menu: @@ -65,8 +65,8 @@ File: slib.info, Node: The Library System, Next: Universal SLIB Procedures, P File: slib.info, Node: Feature, Next: Require, Prev: The Library System, Up: The Library System -1.1 Feature | -=========== | +1.1 Feature +=========== SLIB denotes "features" by symbols. SLIB maintains a list of features supported by a Scheme "session". The set of features provided by a @@ -91,12 +91,12 @@ these numeric features which are appropriate. Other features correspond to the presence of packages of Scheme procedures or syntax (macros). - -- Function: provided? feature | + -- Function: provided? feature Returns `#t' if FEATURE is present in the current Scheme session; otherwise `#f'. More specifically, `provided?' returns `#t' if - the symbol FEATURE is the `software-type', the | - `scheme-implementation-type' (1), or if FEATURE has been provided | - by a module already loaded; and `#f' otherwise. | + the symbol FEATURE is the `software-type', the + `scheme-implementation-type' (1), or if FEATURE has been provided + by a module already loaded; and `#f' otherwise. In some implementations `provided?' tests whether a module has been `require'd by any module or in any thread; other @@ -113,37 +113,37 @@ procedures or syntax (macros). The generalization of `provided?' for arbitrary features and catalog is `feature-eval': - -- Function: feature-eval expression provided? | + -- Function: feature-eval expression provided? Evaluates `and', `or', and `not' forms in EXPRESSION, using the values returned by calling PROVIDED? on the leaf symbols. `feature-eval' returns the boolean result of the logical combinations. - -- Procedure: provide feature | + -- Procedure: provide feature Informs SLIB that FEATURE is supported in this session. (provided? 'foo) => #f (provide 'foo) (provided? 'foo) => #t - ---------- Footnotes ---------- | - | - (1) scheme-implementation-type is the name symbol of the running | -Scheme implementation (RScheme, |STk|, Bigloo, chez, Elk, gambit, | -guile, JScheme, MacScheme, MITScheme, Pocket-Scheme, Scheme48, | -Scheme->C, Scheme48, Scsh, T, umb-scheme, or Vscm). Dependence on | -scheme-implementation-type is almost always the wrong way to do things. | - | + ---------- Footnotes ---------- + + (1) scheme-implementation-type is the name symbol of the running +Scheme implementation (RScheme, |STk|, Bigloo, chez, Elk, gambit, +guile, JScheme, MacScheme, MITScheme, Pocket-Scheme, Scheme48, +Scheme->C, Scheme48, Scsh, T, umb-scheme, or Vscm). Dependence on +scheme-implementation-type is almost always the wrong way to do things. + File: slib.info, Node: Require, Next: Library Catalogs, Prev: Feature, Up: The Library System -1.2 Require | -=========== | +1.2 Require +=========== SLIB creates and maintains a "catalog" mapping features to locations of files introducing procedures and syntax denoted by those features. - -- Variable: *catalog* | + -- Variable: *catalog* Is an association list of features (symbols) and pathnames which will supply those features. The pathname can be either a string or a pair. If pathname is a pair then the first element should be @@ -158,7 +158,7 @@ so that these feature names map to the corresponding files. SLIB provides a form, `require', which loads the files providing the requested feature. - -- Procedure: require feature | + -- Procedure: require feature * If `(provided? FEATURE)' is true, then `require' just returns. * Otherwise, if FEATURE is found in the catalog, then the @@ -173,7 +173,7 @@ There is a related form `require-if', used primarily for enabling compilers to statically include modules which would be dynamically loaded by interpreters. - -- Procedure: require-if condition feature | + -- Procedure: require-if condition feature Requires FEATURE if CONDITION is true. The `random' module uses `require-if' to flag `object->string' as a @@ -187,10 +187,10 @@ The `batch' module uses `require-if' to flag `posix-time' as a module to load if the implementation supports large precision exact integers. (require-if '(and bignum compiling) 'posix-time) - | + The catalog can also be queried using `slib:in-catalog?'. - -- Function: slib:in-catalog? feature | + -- Function: slib:in-catalog? feature Returns a `CDR' of the catalog entry if one was found for the symbol FEATURE in the alist `*catalog*' (and transitively through any symbol aliases encountered). Otherwise, returns `#f'. The @@ -199,8 +199,8 @@ The catalog can also be queried using `slib:in-catalog?'. File: slib.info, Node: Library Catalogs, Next: Catalog Creation, Prev: Require, Up: The Library System -1.3 Library Catalogs | -==================== | +1.3 Library Catalogs +==================== Catalog files consist of one or more "association list"s. In the circumstance where a feature symbol appears in more than one list, the @@ -220,7 +220,7 @@ for elements of catalog lists: `slib:load-compiled's the files <path> .... `(FEATURE aggregate <symbol> ...)' - `require's the features <symbol> .... | + `require's the features <symbol> .... The various macro styles first `require' the named macro package, then just load <path> or load-and-macro-expand <path> as appropriate for the @@ -247,8 +247,8 @@ implementation. File: slib.info, Node: Catalog Creation, Next: Catalog Vicinities, Prev: Library Catalogs, Up: The Library System -1.4 Catalog Creation | -==================== | +1.4 Catalog Creation +==================== At the start of an interactive session no catalog is present, but is created with the first catalog inquiry (such as `(require 'random)'). @@ -279,10 +279,10 @@ the actual pathnames of files can differ from installation to installation, SLIB builds a separate catalog for each implementation it is used with. -The definition of `*SLIB-VERSION*' in SLIB file `require.scm' is -checked against the catalog association of `*SLIB-VERSION*' to +The definition of `*slib-version*' in SLIB file `require.scm' is | +checked against the catalog association of `*slib-version*' to | ascertain when versions have changed. It is a reasonable practice to -change the definition of `*SLIB-VERSION*' whenever the library is +change the definition of `*slib-version*' whenever the library is | changed. If multiple implementations of Scheme use SLIB, remember that recompiling one `slibcat' will update only that implementation's catalog. @@ -291,14 +291,14 @@ The compilation scripts of Scheme implementations which work with SLIB can automatically trigger catalog compilation by deleting `slibcat' or by invoking `require' of a special feature: - -- Procedure: require 'new-catalog | + -- Procedure: require 'new-catalog This will load `mklibcat', which compiles and writes a new `slibcat'. Another special feature of `require' erases SLIB's catalog, forcing it to be reloaded the next time the catalog is queried. - -- Procedure: require #f | + -- Procedure: require #f Removes SLIB's catalog information. This should be done before saving an executable image so that, when restored, its catalog will be loaded afresh. @@ -306,8 +306,8 @@ to be reloaded the next time the catalog is queried. File: slib.info, Node: Catalog Vicinities, Next: Compiling Scheme, Prev: Catalog Creation, Up: The Library System -1.5 Catalog Vicinities | -====================== | +1.5 Catalog Vicinities +====================== Each file in the table below is descibed in terms of its file-system independent "vicinity" (*note Vicinity::). The entries of a catalog in @@ -359,7 +359,7 @@ Copying `usercat' to many directories is inconvenient. Application programs which aren't always run in specially prepared directories can nonetheless register their features during initialization. - -- Procedure: catalog:read vicinity catalog | + -- Procedure: catalog:read vicinity catalog Reads file named by string CATALOG in VICINITY, resolving all paths relative to VICINITY, and adds those feature associations to *CATALOG*. @@ -384,8 +384,8 @@ registering its catalog associations: File: slib.info, Node: Compiling Scheme, Prev: Catalog Vicinities, Up: The Library System -1.6 Compiling Scheme | -==================== | +1.6 Compiling Scheme +==================== To use Scheme compilers effectively with SLIB the compiler needs to know which SLIB modules are to be compiled and which symbols are @@ -407,8 +407,8 @@ conventions. File: slib.info, Node: Module Conventions, Next: Module Manifests, Prev: Compiling Scheme, Up: Compiling Scheme -1.6.1 Module Conventions | ------------------------- | +1.6.1 Module Conventions +------------------------ * All the top-level `require' commands have one quoted argument and are positioned before other Scheme definitions and expressions in @@ -430,7 +430,7 @@ File: slib.info, Node: Module Conventions, Next: Module Manifests, Prev: Comp or `defmacro') suffices. ;@ - (define (identity <obj>) <obj>) | + (define (identity <obj>) <obj>) * Syntax (macro) definitions are grouped at the end of a module file. @@ -454,8 +454,8 @@ latency for interpreters, it can produce headaches for compilers. File: slib.info, Node: Module Manifests, Next: Module Semantics, Prev: Module Conventions, Up: Compiling Scheme -1.6.2 Module Manifests | ----------------------- | +1.6.2 Module Manifests +---------------------- `(require 'manifest)' @@ -465,7 +465,7 @@ It would be defined by: (define slib:catalog (cdr (member (assq 'null *catalog*) *catalog*))) - -- Function: file->requires file provided? catalog | + -- Function: file->requires file provided? catalog Returns a list of the features `require'd by FILE assuming the predicate PROVIDED? and association-list CATALOG. @@ -479,7 +479,7 @@ It would be defined by: (file->requires "obj2str.scm" provided? '()) => (string-port) - -- Function: feature->requires feature provided? catalog | + -- Function: feature->requires feature provided? catalog Returns a list of the features `require'd by FEATURE assuming the predicate PROVIDED? and association-list CATALOG. @@ -495,15 +495,15 @@ It would be defined by: => (tree line-i/o databases parameters string-port pretty-print common-list-functions) - -- Function: feature->requires* feature provided? catalog | - Returns a list of the features transitively `require'd by FEATURE | - assuming the predicate PROVIDED? and association-list CATALOG. | - | - -- Function: file->requires* file provided? catalog | - Returns a list of the features transitively `require'd by FILE | - assuming the predicate PROVIDED? and association-list CATALOG. | - | - -- Function: file->loads file | + -- Function: feature->requires* feature provided? catalog + Returns a list of the features transitively `require'd by FEATURE + assuming the predicate PROVIDED? and association-list CATALOG. + + -- Function: file->requires* file provided? catalog + Returns a list of the features transitively `require'd by FILE + assuming the predicate PROVIDED? and association-list CATALOG. + + -- Function: file->loads file Returns a list of strings naming existing files loaded (load slib:load slib:load-source macro:load defmacro:load syncase:load synclo:load macwork:load) by FILE or any of the files it loads. @@ -513,7 +513,7 @@ It would be defined by: "/usr/local/lib/slib/scaglob.scm" "/usr/local/lib/slib/scaoutp.scm") - -- Function: load->path exp | + -- Function: load->path exp Given a `(load '<expr>)', where <expr> is a string or vicinity stuff), `(load->path <expr>)' figures a path to the file. `load->path' returns that path if it names an existing file; @@ -522,24 +522,24 @@ It would be defined by: (load->path '(in-vicinity (library-vicinity) "mklibcat")) => "/usr/local/lib/slib/mklibcat.scm" - -- Function: file->definitions file definer ... | + -- Function: file->definitions file definer ... Returns a list of the identifier symbols defined by SLIB (or - SLIB-style) file FILE. The optional arguments DEFINERS should be | - symbols signifying a defining form. If none are supplied, then | - the symbols `define-operation', `define', `define-syntax', and | - `defmacro' are captured. | + SLIB-style) file FILE. The optional arguments DEFINERS should be + symbols signifying a defining form. If none are supplied, then + the symbols `define-operation', `define', `define-syntax', and + `defmacro' are captured. (file->definitions "random.scm") => (*random-state* make-random-state seed->random-state copy-random-state random random:chunk) - -- Function: file->exports file definer ... | + -- Function: file->exports file definer ... Returns a list of the identifier symbols exported (advertised) by - SLIB (or SLIB-style) file FILE. The optional arguments DEFINERS | - should be symbols signifying a defining form. If none are | - supplied, then the symbols `define-operation', `define', | - `define-syntax', and `defmacro' are captured. | + SLIB (or SLIB-style) file FILE. The optional arguments DEFINERS + should be symbols signifying a defining form. If none are + supplied, then the symbols `define-operation', `define', + `define-syntax', and `defmacro' are captured. (file->exports "random.scm") => (make-random-state seed->random-state @@ -550,12 +550,12 @@ It would be defined by: random:normal-vector! random:normal random:exp random:uniform) - -- Function: feature->export-alist feature catalog | + -- Function: feature->export-alist feature catalog Returns a list of lists; each sublist holding the name of the file implementing FEATURE, and the identifier symbols exported (advertised) by SLIB (or SLIB-style) feature FEATURE, in CATALOG. - -- Function: feature->exports feature catalog | + -- Function: feature->exports feature catalog Returns a list of all exports of FEATURE. In the case of `aggregate' features, more than one file may have export @@ -586,8 +586,8 @@ lists to report: File: slib.info, Node: Module Semantics, Next: Top-level Variable References, Prev: Module Manifests, Up: Compiling Scheme -1.6.3 Module Semantics | ----------------------- | +1.6.3 Module Semantics +---------------------- For the purpose of compiling Scheme code, each top-level `require' makes the identifiers exported by its feature's module `defined' (or @@ -620,8 +620,8 @@ to compile these constructs may be to treat `provided?' as a macro. File: slib.info, Node: Top-level Variable References, Next: Module Analysis, Prev: Module Semantics, Up: Compiling Scheme -1.6.4 Top-level Variable References | ------------------------------------ | +1.6.4 Top-level Variable References +----------------------------------- `(require 'top-refs)' @@ -631,11 +631,11 @@ work by traversing expressions and definitions, keeping track of bindings encountered. It is certainly possible to foil these functions, but they return useful information about SLIB source code. - -- Function: top-refs obj | + -- Function: top-refs obj Returns a list of the top-level variables referenced by the Scheme expression OBJ. - -- Function: top-refs<-file filename | + -- Function: top-refs<-file filename FILENAME should be a string naming an existing file containing Scheme source code. `top-refs<-file' returns a list of the top-level variable references made by expressions in the file @@ -651,13 +651,13 @@ functions, but they return useful information about SLIB source code. The following function parses an "Info" Index. (1) - -- Function: exports<-info-index file n ... | + -- Function: exports<-info-index file n ... N ... must be an increasing series of positive integers. `exports<-info-index' returns a list of all the identifiers appearing in the Nth ... (info) indexes of FILE. The identifiers have the case that the implementation's `read' uses for symbols. Identifiers containing spaces (eg. `close-base on base-table') are - _not_ included. #f is returned if the index is not found. | + _not_ included. #f is returned if the index is not found. Each info index is headed by a `* Menu:' line. To list the symbols in the first and third info indexes do: @@ -676,15 +676,15 @@ in the info file. This command excerpts the SLIB index into File: slib.info, Node: Module Analysis, Prev: Top-level Variable References, Up: Compiling Scheme -1.6.5 Module Analysis | ---------------------- | +1.6.5 Module Analysis +--------------------- `(require 'vet)' - -- Function: vet-slib file1 ... | + -- Function: vet-slib file1 ... Using the procedures in the `top-refs' and `manifest' modules, - `vet-slib' analyzes each SLIB module and FILE1, ..., reporting | - about any procedure or macro defined whether it is: | + `vet-slib' analyzes each SLIB module and FILE1, ..., reporting + about any procedure or macro defined whether it is: orphaned defined, not called, not exported; @@ -708,14 +708,14 @@ File: slib.info, Node: Module Analysis, Prev: Top-level Variable References, errors, undocumented procedures, missing procedures, and cyclic dependencies in SLIB. - The optional arguments FILE1, ... provide a simple way to vet | - prospective SLIB modules. | - | + The optional arguments FILE1, ... provide a simple way to vet + prospective SLIB modules. + File: slib.info, Node: Universal SLIB Procedures, Next: Scheme Syntax Extension Packages, Prev: The Library System, Up: Top -2 Universal SLIB Procedures | -*************************** | +2 Universal SLIB Procedures +*************************** The procedures described in these sections are supported by all implementations as part of the `*.init' files or by `require.scm'. @@ -731,8 +731,8 @@ implementations as part of the `*.init' files or by `require.scm'. File: slib.info, Node: Vicinity, Next: Configuration, Prev: Universal SLIB Procedures, Up: Universal SLIB Procedures -2.1 Vicinity | -============ | +2.1 Vicinity +============ A vicinity is a descriptor for a place in the file system. Vicinities hide from the programmer the concepts of host, volume, directory, and @@ -740,56 +740,56 @@ version. Vicinities express only the concept of a file environment where a file name can be resolved to a file in a system independent manner. Vicinities can even be used on "flat" file systems (which have no directory structure) by having the vicinity express constraints on -the file name. | +the file name. - All of these procedures are file-system dependent. Use of these | -vicinity procedures can make programs file-system _in_dependent. | + All of these procedures are file-system dependent. Use of these +vicinity procedures can make programs file-system _in_dependent. -These procedures are provided by all implementations. On most systems | -a vicinity is a string. | - | - -- Function: make-vicinity dirpath | +These procedures are provided by all implementations. On most systems +a vicinity is a string. + + -- Function: make-vicinity dirpath Returns DIRPATH as a vicinity for use as first argument to `in-vicinity'. - -- Function: pathname->vicinity path | + -- Function: pathname->vicinity path Returns the vicinity containing PATH. (pathname->vicinity "/usr/local/lib/scm/Link.scm") => "/usr/local/lib/scm/" - -- Function: program-vicinity | + -- Function: program-vicinity Returns the vicinity of the currently loading Scheme code. For an interpreter this would be the directory containing source code. For a compiled system (with multiple files) this would be the directory where the object or executable files are. If no file is - currently loading, then the result is undefined. *Warning:* | + currently loading, then the result is undefined. *Warning:* `program-vicinity' can return incorrect values if your program - escapes back into a `load' continuation. | + escapes back into a `load' continuation. - -- Function: library-vicinity | + -- Function: library-vicinity Returns the vicinity of the shared Scheme library. - -- Function: implementation-vicinity | + -- Function: implementation-vicinity Returns the vicinity of the underlying Scheme implementation. This vicinity will likely contain startup code and messages and a compiler. - -- Function: user-vicinity | + -- Function: user-vicinity Returns the vicinity of the current directory of the user. On most systems this is `""' (the empty string). - -- Function: home-vicinity | - Returns the vicinity of the user's "HOME" directory, the directory which | - typically contains files which customize a computer environment | - for a user. If scheme is running without a user (eg. a daemon) or | - if this concept is meaningless for the platform, then | + -- Function: home-vicinity + Returns the vicinity of the user's "HOME" directory, the directory which + typically contains files which customize a computer environment + for a user. If scheme is running without a user (eg. a daemon) or + if this concept is meaningless for the platform, then `home-vicinity' returns `#f'. - -- Function: vicinity:suffix? chr | + -- Function: vicinity:suffix? chr Returns the `#t' if CHR is a vicinity suffix character; and `#f' otherwise. Typical vicinity suffixes are `/', `:', and `\', - -- Function: in-vicinity vicinity filename | + -- Function: in-vicinity vicinity filename Returns a filename suitable for use by `slib:load', `slib:load-source', `slib:load-compiled', `open-input-file', `open-output-file', etc. The returned filename is FILENAME in @@ -800,34 +800,34 @@ a vicinity is a string. | to the value of `(user-vicinity)' is unspecified. For most systems `in-vicinity' can be `string-append'. - -- Function: sub-vicinity vicinity name | + -- Function: sub-vicinity vicinity name Returns the vicinity of VICINITY restricted to NAME. This is used for large systems where names of files in subsystems could conflict. On systems with directory structure `sub-vicinity' will return a pathname of the subdirectory NAME of VICINITY. - -- Function: with-load-pathname path thunk | - PATH should be a string naming a file being read or loaded. | - `with-load-pathname' evaluates THUNK in a dynamic scope where an | - internal variable is bound to PATH; the internal variable is used | - for messages and `program-vicinity'. `with-load-pathname' returns | - the value returned by THUNK. | - | + -- Function: with-load-pathname path thunk + PATH should be a string naming a file being read or loaded. + `with-load-pathname' evaluates THUNK in a dynamic scope where an + internal variable is bound to PATH; the internal variable is used + for messages and `program-vicinity'. `with-load-pathname' returns + the value returned by THUNK. + File: slib.info, Node: Configuration, Next: Input/Output, Prev: Vicinity, Up: Universal SLIB Procedures -2.2 Configuration | -================= | +2.2 Configuration +================= These constants and procedures describe characteristics of the Scheme and underlying operating system. They are provided by all implementations. - -- Constant: char-code-limit | + -- Constant: char-code-limit An integer 1 larger that the largest value which can be returned by `char->integer'. - -- Constant: most-positive-fixnum | + -- Constant: most-positive-fixnum In implementations which support integers of practically unlimited size, MOST-POSITIVE-FIXNUM is a large exact integer within the range of exact integers that may result from computing the length @@ -838,37 +838,37 @@ implementations. that may result from computing the length of a list, vector, or string. - -- Constant: slib:tab | + -- Constant: slib:tab The tab character. - -- Constant: slib:form-feed | + -- Constant: slib:form-feed The form-feed character. - -- Function: software-type | + -- Function: software-type Returns a symbol denoting the generic operating system type. For instance, `unix', `vms', `macos', `amiga', or `ms-dos'. - -- Function: slib:report-version | + -- Function: slib:report-version Displays the versions of SLIB and the underlying Scheme implementation and the name of the operating system. An unspecified value is returned. - (slib:report-version) => slib "3a2" on scm "5b1" on unix | + (slib:report-version) => slib "3a3" on scm "5b1" on unix | - -- Function: slib:report | + -- Function: slib:report Displays the information of `(slib:report-version)' followed by almost all the information neccessary for submitting a problem report. An unspecified value is returned. - -- Function: slib:report #t | + -- Function: slib:report #t provides a more verbose listing. - -- Function: slib:report filename | + -- Function: slib:report filename Writes the report to file `filename'. (slib:report) => - slib "3a2" on scm "5b1" on unix | + slib "3a3" on scm "5b1" on unix | (implementation-vicinity) is "/usr/local/lib/scm/" (library-vicinity) is "/usr/local/lib/slib/" (scheme-file-suffix) is ".scm" @@ -894,21 +894,21 @@ implementations. File: slib.info, Node: Input/Output, Next: System, Prev: Configuration, Up: Universal SLIB Procedures -2.3 Input/Output | -================ | +2.3 Input/Output +================ These procedures are provided by all implementations. - -- Function: file-exists? filename | + -- Function: file-exists? filename Returns `#t' if the specified file exists. Otherwise, returns `#f'. If the underlying implementation does not support this feature then `#f' is always returned. - -- Function: delete-file filename | + -- Function: delete-file filename Deletes the file specified by FILENAME. If FILENAME can not be deleted, `#f' is returned. Otherwise, `#t' is returned. - -- Function: open-file filename modes | + -- Function: open-file filename modes FILENAME should be a string naming a file. `open-file' returns a port depending on the symbol MODES: @@ -934,18 +934,18 @@ These procedures are provided by all implementations. signalled. For output, if a file with the given name already exists, the effect is unspecified. - -- Function: port? obj | + -- Function: port? obj Returns #t if OBJ is an input or output port, otherwise returns #f. - -- Procedure: close-port port | + -- Procedure: close-port port Closes the file associated with PORT, rendering the PORT incapable of delivering or accepting characters. `close-file' has no effect if the file has already been closed. The value returned is unspecified. - -- Function: call-with-open-ports proc ports ... | - -- Function: call-with-open-ports ports ... proc | + -- Function: call-with-open-ports proc ports ... + -- Function: call-with-open-ports ports ... proc PROC should be a procedure that accepts as many arguments as there are PORTS passed to `call-with-open-ports'. `call-with-open-ports' calls PROC with PORTS .... If PROC @@ -955,30 +955,30 @@ These procedures are provided by all implementations. to prove that the ports will never again be used for a read or write operation. - -- Function: tmpnam | + -- Function: tmpnam Returns a pathname for a file which will likely not be used by any other process. Successive calls to `(tmpnam)' will return different pathnames. - -- Function: current-error-port | + -- Function: current-error-port Returns the current port to which diagnostic and error output is directed. - -- Procedure: force-output | - -- Procedure: force-output port | + -- Procedure: force-output + -- Procedure: force-output port Forces any pending output on PORT to be delivered to the output device and returns an unspecified value. The PORT argument may be omitted, in which case it defaults to the value returned by `(current-output-port)'. - -- Function: output-port-width | - -- Function: output-port-width port | + -- Function: output-port-width + -- Function: output-port-width port Returns the width of PORT, which defaults to `(current-output-port)' if absent. If the width cannot be determined 79 is returned. - -- Function: output-port-height | - -- Function: output-port-height port | + -- Function: output-port-height + -- Function: output-port-height port Returns the height of PORT, which defaults to `(current-output-port)' if absent. If the height cannot be determined 24 is returned. @@ -986,23 +986,23 @@ These procedures are provided by all implementations. File: slib.info, Node: System, Next: Miscellany, Prev: Input/Output, Up: Universal SLIB Procedures -2.4 System | -========== | +2.4 System +========== These procedures are provided by all implementations. - -- Procedure: slib:load-source name | + -- Procedure: slib:load-source name Loads a file of Scheme source code from NAME with the default filename extension used in SLIB. For instance if the filename extension used in SLIB is `.scm' then `(slib:load-source "foo")' will load from file `foo.scm'. - -- Procedure: slib:load-compiled name | + -- Procedure: slib:load-compiled name On implementations which support separtely loadable compiled modules, loads a file of compiled code from NAME with the implementation's filename extension for compiled code appended. - -- Procedure: slib:load name | + -- Procedure: slib:load name Loads a file of Scheme source or compiled code from NAME with the appropriate suffixes appended. If both source and compiled code are present with the appropriate names then the implementation @@ -1012,29 +1012,29 @@ These procedures are provided by all implementations. If an implementation does not support compiled code then `slib:load' will be identical to `slib:load-source'. - -- Procedure: slib:eval obj | + -- Procedure: slib:eval obj `eval' returns the value of OBJ evaluated in the current top level environment. *Note Eval:: provides a more general evaluation facility. - -- Procedure: slib:eval-load filename eval | + -- Procedure: slib:eval-load filename eval FILENAME should be a string. If filename names an existing file, the Scheme source code expressions and definitions are read from the file and EVAL called with them sequentially. The `slib:eval-load' procedure does not affect the values returned by `current-input-port' and `current-output-port'. - -- Procedure: slib:warn arg1 arg2 ... | + -- Procedure: slib:warn arg1 arg2 ... Outputs a warning message containing the arguments. - -- Procedure: slib:error arg1 arg2 ... | + -- Procedure: slib:error arg1 arg2 ... Outputs an error message containing the arguments, aborts evaluation of the current form and responds in a system dependent way to the error. Typical responses are to abort the program or to enter a read-eval-print loop. - -- Procedure: slib:exit n | - -- Procedure: slib:exit | + -- Procedure: slib:exit n + -- Procedure: slib:exit Exits from the Scheme session returning status N to the system. If N is omitted or `#t', a success status is returned to the system (if possible). If N is `#f' a failure is returned to the @@ -1042,7 +1042,7 @@ These procedures are provided by all implementations. the system (if possible). If the Scheme session cannot exit an unspecified value is returned from `slib:exit'. - -- Function: browse-url url | + -- Function: browse-url url Web browsers have become so ubiquitous that programming languagues should support a uniform interface to them. @@ -1058,12 +1058,12 @@ These procedures are provided by all implementations. File: slib.info, Node: Miscellany, Prev: System, Up: Universal SLIB Procedures -2.5 Miscellany | -============== | +2.5 Miscellany +============== These procedures are provided by all implementations. - -- Function: identity x | + -- Function: identity x IDENTITY returns its argument. Example: @@ -1074,24 +1074,24 @@ These procedures are provided by all implementations. (map identity LST) == (copy-list LST) - -- Function: expt n k | - Returns N raised to the non-negative integer exponent K. | + -- Function: expt n k + Returns N raised to the non-negative integer exponent K. - Example: | - (expt 2 5) | - => 32 | - (expt -3 3) | - => -27 | - | -2.5.1 Mutual Exclusion | ----------------------- | - | -An "exchanger" is a procedure of one argument regulating mutually exclusive | -access to a resource. When a exchanger is called, its current content | -is returned, while being replaced by its argument in an atomic | + Example: + (expt 2 5) + => 32 + (expt -3 3) + => -27 + +2.5.1 Mutual Exclusion +---------------------- + +An "exchanger" is a procedure of one argument regulating mutually exclusive +access to a resource. When a exchanger is called, its current content +is returned, while being replaced by its argument in an atomic operation. - -- Function: make-exchanger obj | + -- Function: make-exchanger obj Returns a new exchanger with the argument OBJ as its initial content. @@ -1114,20 +1114,20 @@ operation. (pop queue) => #f -2.5.2 Legacy | ------------- | +2.5.2 Legacy +------------ The following procedures were present in Scheme until R4RS (*note Language changes: (r4rs)Notes.). They are provided by all SLIB implementations. - -- Constant: t | + -- Constant: t Derfined as `#t'. - -- Constant: nil | + -- Constant: nil Defined as `#f'. - -- Function: last-pair l | + -- Function: last-pair l Returns the last pair in the list L. Example: (last-pair (cons 1 2)) => (1 . 2) @@ -1138,8 +1138,8 @@ implementations. File: slib.info, Node: Scheme Syntax Extension Packages, Next: Textual Conversion Packages, Prev: Universal SLIB Procedures, Up: Top -3 Scheme Syntax Extension Packages | -********************************** | +3 Scheme Syntax Extension Packages +********************************** * Menu: @@ -1153,29 +1153,33 @@ File: slib.info, Node: Scheme Syntax Extension Packages, Next: Textual Convers Syntax extensions (macros) included with SLIB. -* Define-Structure:: 'structure | +* Define-Structure:: 'structure +* Define-Record-Type:: 'define-record-type, 'srfi-9 | * Fluid-Let:: 'fluid-let +* Binding to multiple values:: 'receive, 'srfi-8 | +* Guarded LET* special form:: 'and-let*, 'srfi-2 | +* Guarded COND Clause:: 'guarded-cond-clause, 'srfi-61 | * Yasos:: 'yasos, 'oop, 'collect File: slib.info, Node: Defmacro, Next: R4RS Macros, Prev: Scheme Syntax Extension Packages, Up: Scheme Syntax Extension Packages -3.1 Defmacro | -============ | +3.1 Defmacro +============ Defmacros are supported by all implementations. - -- Function: gentemp | + -- Function: gentemp Returns a new (interned) symbol each time it is called. The symbol names are implementation-dependent (gentemp) => scm:G0 (gentemp) => scm:G1 - -- Function: defmacro:eval e | + -- Function: defmacro:eval e Returns the `slib:eval' of expanding all defmacros in scheme expression E. - -- Function: defmacro:load filename | + -- Function: defmacro:load filename FILENAME should be a string. If filename names an existing file, the `defmacro:load' procedure reads Scheme source code expressions and definitions from the file and evaluates them sequentially. @@ -1183,11 +1187,11 @@ Defmacros are supported by all implementations. definitions. The `macro:load' procedure does not affect the values returned by `current-input-port' and `current-output-port'. - -- Function: defmacro? sym | + -- Function: defmacro? sym Returns `#t' if SYM has been defined by `defmacro', `#f' otherwise. - -- Function: macroexpand-1 form | - -- Function: macroexpand form | + -- Function: macroexpand-1 form + -- Function: macroexpand form If FORM is a macro call, `macroexpand-1' will expand the macro call once and return it. A FORM is considered to be a macro call only if it is a cons whose `car' is a symbol for which a @@ -1196,26 +1200,26 @@ Defmacros are supported by all implementations. `macroexpand' is similar to `macroexpand-1', but repeatedly expands FORM until it is no longer a macro call. - -- Macro: defmacro name lambda-list form ... | + -- Macro: defmacro name lambda-list form ... When encountered by `defmacro:eval', `defmacro:macroexpand*', or `defmacro:load' defines a new macro which will henceforth be expanded when encountered by `defmacro:eval', `defmacro:macroexpand*', or `defmacro:load'. -3.1.1 Defmacroexpand | --------------------- | +3.1.1 Defmacroexpand +-------------------- `(require 'defmacroexpand)' - -- Function: defmacro:expand* e | + -- Function: defmacro:expand* e Returns the result of expanding all defmacros in scheme expression E. File: slib.info, Node: R4RS Macros, Next: Macro by Example, Prev: Defmacro, Up: Scheme Syntax Extension Packages -3.2 R4RS Macros | -=============== | +3.2 R4RS Macros +=============== `(require 'macro)' is the appropriate call if you want R4RS high-level macros but don't care about the low level implementation. If an SLIB @@ -1225,15 +1229,15 @@ Otherwise, one of the R4RS macros implemetations is loaded. The SLIB R4RS macro implementations support the following uniform interface: - -- Function: macro:expand sexpression | + -- Function: macro:expand sexpression Takes an R4RS expression, macro-expands it, and returns the result of the macro expansion. - -- Function: macro:eval sexpression | + -- Function: macro:eval sexpression Takes an R4RS expression, macro-expands it, evals the result of the macro expansion, and returns the result of the evaluation. - -- Procedure: macro:load filename | + -- Procedure: macro:load filename FILENAME should be a string. If filename names an existing file, the `macro:load' procedure reads Scheme source code expressions and definitions from the file and evaluates them sequentially. These @@ -1244,8 +1248,8 @@ interface: File: slib.info, Node: Macro by Example, Next: Macros That Work, Prev: R4RS Macros, Up: Scheme Syntax Extension Packages -3.3 Macro by Example | -==================== | +3.3 Macro by Example +==================== `(require 'macro-by-example)' @@ -1264,8 +1268,8 @@ R4RS) by Dorai Sitaram, (dorai @ cs.rice.edu) using `defmacro'. natively supported (most implementations) -3.3.1 Caveat | ------------- | +3.3.1 Caveat +------------ These macros are not referentially transparent (*note Macros: (r4rs)Macros.). Lexically scoped macros (i.e., `let-syntax' and @@ -1279,7 +1283,7 @@ featureful (but also more expensive) versions of syntax-rules available in slib *Note Macros That Work::, *Note Syntactic Closures::, and *Note Syntax-Case Macros::. - -- Macro: define-syntax keyword transformer-spec | + -- Macro: define-syntax keyword transformer-spec The KEYWORD is an identifier, and the TRANSFORMER-SPEC should be an instance of `syntax-rules'. @@ -1296,7 +1300,7 @@ Syntax-Case Macros::. (let* (( name2 val2) ...) body1 body2 ...))))) - -- Macro: syntax-rules literals syntax-rule ... | + -- Macro: syntax-rules literals syntax-rule ... LITERALS is a list of identifiers, and each SYNTAX-RULE should be of the form @@ -1319,8 +1323,8 @@ Syntax-Case Macros::. File: slib.info, Node: Macros That Work, Next: Syntactic Closures, Prev: Macro by Example, Up: Scheme Syntax Extension Packages -3.4 Macros That Work | -==================== | +3.4 Macros That Work +==================== `(require 'macros-that-work)' @@ -1328,19 +1332,19 @@ File: slib.info, Node: Macros That Work, Next: Syntactic Closures, Prev: Macr in that it does not expand derived expression types to primitive expression types. - -- Function: macro:expand expression | - -- Function: macwork:expand expression | + -- Function: macro:expand expression + -- Function: macwork:expand expression Takes an R4RS expression, macro-expands it, and returns the result of the macro expansion. - -- Function: macro:eval expression | - -- Function: macwork:eval expression | + -- Function: macro:eval expression + -- Function: macwork:eval expression `macro:eval' returns the value of EXPRESSION in the current top level environment. EXPRESSION can contain macro definitions. Side effects of EXPRESSION will affect the top level environment. - -- Procedure: macro:load filename | - -- Procedure: macwork:load filename | + -- Procedure: macro:load filename + -- Procedure: macwork:load filename FILENAME should be a string. If filename names an existing file, the `macro:load' procedure reads Scheme source code expressions and definitions from the file and evaluates them sequentially. These @@ -1355,10 +1359,10 @@ Rees [editors]. To appear in LISP Pointers. Also available as a technical report from the University of Oregon, MIT AI Lab, and Cornell. Macros That Work. Clinger and Rees. POPL '91. - | - The supported syntax differs from the R4RS in that vectors are allowed | -as patterns and as templates and are not allowed as pattern or template | -data. | + + The supported syntax differs from the R4RS in that vectors are allowed +as patterns and as templates and are not allowed as pattern or template +data. transformer spec ==> (syntax-rules literals rules) @@ -1400,8 +1404,8 @@ data. | literals ==> () | (symbol . literals) -3.4.1 Definitions | ------------------ | +3.4.1 Definitions +----------------- Scope of an ellipsis Within a pattern or template, the scope of an ellipsis (`...') is @@ -1433,8 +1437,8 @@ Variables opened by an ellipsis template ellipsis template. -3.4.2 Restrictions | ------------------- | +3.4.2 Restrictions +------------------ No pattern variable appears more than once within a pattern. @@ -1502,24 +1506,24 @@ unnecessarily. That shouldn't matter very often. File: slib.info, Node: Syntactic Closures, Next: Syntax-Case Macros, Prev: Macros That Work, Up: Scheme Syntax Extension Packages -3.5 Syntactic Closures | -====================== | +3.5 Syntactic Closures +====================== `(require 'syntactic-closures)' - -- Function: macro:expand expression | - -- Function: synclo:expand expression | + -- Function: macro:expand expression + -- Function: synclo:expand expression Returns scheme code with the macros and derived expression types of EXPRESSION expanded to primitive expression types. - -- Function: macro:eval expression | - -- Function: synclo:eval expression | + -- Function: macro:eval expression + -- Function: synclo:eval expression `macro:eval' returns the value of EXPRESSION in the current top level environment. EXPRESSION can contain macro definitions. Side effects of EXPRESSION will affect the top level environment. - -- Procedure: macro:load filename | - -- Procedure: synclo:load filename | + -- Procedure: macro:load filename + -- Procedure: synclo:load filename FILENAME should be a string. If filename names an existing file, the `macro:load' procedure reads Scheme source code expressions and definitions from the file and evaluates them sequentially. These @@ -1527,17 +1531,17 @@ File: slib.info, Node: Syntactic Closures, Next: Syntax-Case Macros, Prev: Ma definitions. The `macro:load' procedure does not affect the values returned by `current-input-port' and `current-output-port'. -3.5.1 Syntactic Closure Macro Facility | --------------------------------------- | +3.5.1 Syntactic Closure Macro Facility +-------------------------------------- A Syntactic Closures Macro Facility by Chris Hanson 9 November 1991 - | - This document describes "syntactic closures", a low-level macro | -facility for the Scheme programming language. The facility is an | -alternative to the low-level macro facility described in the `Revised^4 | -Report on Scheme.' This document is an addendum to that report. | + + This document describes "syntactic closures", a low-level macro +facility for the Scheme programming language. The facility is an +alternative to the low-level macro facility described in the `Revised^4 +Report on Scheme.' This document is an addendum to that report. The syntactic closures facility extends the BNF rule for TRANSFORMER SPEC to allow a new keyword that introduces a low-level macro @@ -1557,8 +1561,8 @@ macro transformers are defined. The third part describes the use of "identifiers", which extend the syntactic closure mechanism to be compatible with `syntax-rules'. -3.5.1.1 Terminology | -................... | +3.5.1.1 Terminology +................... This section defines the concepts and data types used by the syntactic closures facility. @@ -1605,13 +1609,13 @@ closures facility. structure is replaced by its form. -3.5.1.2 Transformer Definition | -.............................. | +3.5.1.2 Transformer Definition +.............................. This section describes the `transformer' special form and the procedures `make-syntactic-closure' and `capture-syntactic-environment'. - -- Syntax: transformer expression | + -- Syntax: transformer expression Syntax: It is an error if this syntax occurs except as a TRANSFORMER SPEC. @@ -1675,7 +1679,7 @@ procedures `make-syntactic-closure' and `capture-syntactic-environment'. `make-syntactic-closure' to close the form in a syntactic environment. - -- Function: make-syntactic-closure environment free-names form | + -- Function: make-syntactic-closure environment free-names form ENVIRONMENT must be a syntactic environment, FREE-NAMES must be a list of identifiers, and FORM must be a form. `make-syntactic-closure' constructs and returns a syntactic closure @@ -1709,7 +1713,7 @@ procedures `make-syntactic-closure' and `capture-syntactic-environment'. To obtain a syntactic environment other than the usage environment, use `capture-syntactic-environment'. - -- Function: capture-syntactic-environment procedure | + -- Function: capture-syntactic-environment procedure `capture-syntactic-environment' returns a form that will, when transformed, call PROCEDURE on the current syntactic environment. PROCEDURE should compute and return a new form to be transformed, @@ -1799,8 +1803,8 @@ procedures `make-syntactic-closure' and `capture-syntactic-environment'. (lambda (transformer-env) ...)))) -3.5.1.3 Identifiers | -................... | +3.5.1.3 Identifiers +................... This section describes the procedures that create and manipulate identifiers. Previous syntactic closure proposals did not have an @@ -1832,7 +1836,7 @@ the usage environment. This guarantees that the macro transformation is hygienic, without requiring the transformer to know the syntactic roles of the substituted input subforms. - -- Function: identifier? object | + -- Function: identifier? object Returns `#t' if OBJECT is an identifier, otherwise returns `#f'. Examples: @@ -1866,7 +1870,7 @@ roles of the substituted input subforms. environment as the symbol `else' means in the transformer environment. - -- Function: identifier=? environment1 identifier1 environment2 | + -- Function: identifier=? environment1 identifier1 environment2 identifier2 ENVIRONMENT1 and ENVIRONMENT2 must be syntactic environments, and IDENTIFIER1 and IDENTIFIER2 must be identifiers. `identifier=?' @@ -1899,8 +1903,8 @@ roles of the substituted input subforms. (foobar)))) => (#f #t) -3.5.1.4 Acknowledgements | -........................ | +3.5.1.4 Acknowledgements +........................ The syntactic closures facility was invented by Alan Bawden and Jonathan Rees. The use of aliases to implement `syntax-rules' was invented by @@ -1909,25 +1913,25 @@ proposal is derived from an earlier proposal by Alan Bawden. File: slib.info, Node: Syntax-Case Macros, Next: Define-Structure, Prev: Syntactic Closures, Up: Scheme Syntax Extension Packages - | -3.6 Syntax-Case Macros | -====================== | + +3.6 Syntax-Case Macros +====================== `(require 'syntax-case)' - -- Function: macro:expand expression | - -- Function: syncase:expand expression | + -- Function: macro:expand expression + -- Function: syncase:expand expression Returns scheme code with the macros and derived expression types of EXPRESSION expanded to primitive expression types. - -- Function: macro:eval expression | - -- Function: syncase:eval expression | + -- Function: macro:eval expression + -- Function: syncase:eval expression `macro:eval' returns the value of EXPRESSION in the current top level environment. EXPRESSION can contain macro definitions. Side effects of EXPRESSION will affect the top level environment. - -- Procedure: macro:load filename | - -- Procedure: syncase:load filename | + -- Procedure: macro:load filename + -- Procedure: syncase:load filename FILENAME should be a string. If filename names an existing file, the `macro:load' procedure reads Scheme source code expressions and definitions from the file and evaluates them sequentially. These @@ -1980,8 +1984,8 @@ distribution by anonymous FTP in SPARCstation SLC (with SCM) and about 90s on a Macintosh SE/30 (with Gambit). -3.6.1 Notes | ------------ | +3.6.1 Notes +----------- All R4RS syntactic forms are defined, including `delay'. Along with `delay' are simple definitions for `make-promise' (into which `delay' @@ -2011,67 +2015,86 @@ if there is some incompatibility that is not flagged as such. (dyb @ iuvax.cs.indiana.edu). -File: slib.info, Node: Define-Structure, Next: Fluid-Let, Prev: Syntax-Case Macros, Up: Scheme Syntax Extension Packages +File: slib.info, Node: Define-Structure, Next: Define-Record-Type, Prev: Syntax-Case Macros, Up: Scheme Syntax Extension Packages | -3.7 Define-Structure | -==================== | +3.7 Define-Structure +==================== `(require 'structure)' -Included with the `syntax-case' files was `structure.scm' which defines | -a macro `define-structure'. Here is its documentation from Gambit 4.0: | - | - -- special form: define-structure NAME FIELD... | - Record data types similar to Pascal records and C `struct' types | - can be defined using the `define-structure' special form. The | - identifier NAME specifies the name of the new data type. The | - structure name is followed by K identifiers naming each field of | - the record. The `define-structure' expands into a set of | - definitions of the following procedures: | - | - * `make-NAME' - A K argument procedure which constructs a new | - record from the value of its K fields. | - | - * `NAME?' - A procedure which tests if its single argument is | - of the given record type. | - | - * `NAME-FIELD' - For each field, a procedure taking as its | - single argument a value of the given record type and returning | - the content of the corresponding field of the record. | +Included with the `syntax-case' files was `structure.scm' which defines +a macro `define-structure'. Here is its documentation from Gambit 4.0: + + -- special form: define-structure NAME FIELD... + Record data types similar to Pascal records and C `struct' types + can be defined using the `define-structure' special form. The + identifier NAME specifies the name of the new data type. The + structure name is followed by K identifiers naming each field of + the record. The `define-structure' expands into a set of + definitions of the following procedures: + + * `make-NAME' - A K argument procedure which constructs a new + record from the value of its K fields. + + * `NAME?' - A procedure which tests if its single argument is + of the given record type. + + * `NAME-FIELD' - For each field, a procedure taking as its + single argument a value of the given record type and returning + the content of the corresponding field of the record. + + * `NAME-FIELD-set!' - For each field, a two argument procedure + taking as its first argument a value of the given record + type. The second argument gets assigned to the corresponding + field of the record and the void object is returned. + + + Gambit record data types have a printed representation that + includes the name of the type and the name and value of each field. + + For example: + + > (define-structure point x y color) + > (define p (make-point 3 5 'red)) + > p + #<point #3 x: 3 y: 5 color: red> + > (point-x p) + 3 + > (point-color p) + red + > (point-color-set! p 'black) + > p + #<point #3 x: 3 y: 5 color: black> + + + +File: slib.info, Node: Define-Record-Type, Next: Fluid-Let, Prev: Define-Structure, Up: Scheme Syntax Extension Packages | - * `NAME-FIELD-set!' - For each field, a two argument procedure | - taking as its first argument a value of the given record | - type. The second argument gets assigned to the corresponding | - field of the record and the void object is returned. | +3.8 Define-Record-Type | +====================== | | +`(require 'define-record-type)' or `(require 'srfi-9)' | | - Gambit record data types have a printed representation that | - includes the name of the type and the name and value of each field. | + `http://srfi.schemers.org/srfi-9/srfi-9.html' | | - For example: | + -- Special Form: define-record-type <type-name> (<constructor-name> | + <field-tag> ...) <predicate-name> <field-spec> ... | + Where | + <field-spec> == (<field-tag> <accessor-name>) | + == (<field-tag> <accessor-name> <modifier-name>) | | - > (define-structure point x y color) | - > (define p (make-point 3 5 'red)) | - > p | - #<point #3 x: 3 y: 5 color: red> | - > (point-x p) | - 3 | - > (point-color p) | - red | - > (point-color-set! p 'black) | - > p | - #<point #3 x: 3 y: 5 color: black> | + `define-record-type' is a syntax wrapper for the SLIB `record' | + module. | | - -File: slib.info, Node: Fluid-Let, Next: Yasos, Prev: Define-Structure, Up: Scheme Syntax Extension Packages +File: slib.info, Node: Fluid-Let, Next: Binding to multiple values, Prev: Define-Record-Type, Up: Scheme Syntax Extension Packages | -3.8 Fluid-Let | -============= | +3.9 Fluid-Let | +============= `(require 'fluid-let)' - -- Syntax: fluid-let `(BINDINGS ...)' FORMS... | + -- Syntax: fluid-let `(BINDINGS ...)' FORMS... (fluid-let ((VARIABLE INIT) ...) EXPRESSION EXPRESSION ...) @@ -2089,10 +2112,82 @@ each INIT to the binding (determined by the rules of lexical scoping) of its corresponding VARIABLE. -File: slib.info, Node: Yasos, Prev: Fluid-Let, Up: Scheme Syntax Extension Packages - -3.9 Yasos | -========= | +File: slib.info, Node: Binding to multiple values, Next: Guarded LET* special form, Prev: Fluid-Let, Up: Scheme Syntax Extension Packages + | +3.10 Binding to multiple values | +=============================== | + | +`(require 'receive)' or `(require 'srfi-8)' | + | + -- Special Form: receive formals expression body ... | + `http://srfi.schemers.org/srfi-8/srfi-8.html' | + | + +File: slib.info, Node: Guarded LET* special form, Next: Guarded COND Clause, Prev: Binding to multiple values, Up: Scheme Syntax Extension Packages + | +3.11 Guarded LET* special form | +============================== | + | +`(require 'and-let*)' or `(require 'srfi-2)' | + | + -- Macro: and-let* claws body ... | + `http://srfi.schemers.org/srfi-2/srfi-2.html' | + | + +File: slib.info, Node: Guarded COND Clause, Next: Yasos, Prev: Guarded LET* special form, Up: Scheme Syntax Extension Packages + | +3.12 Guarded COND Clause | +======================== | + | +`(require 'guarded-cond-clause)' or `(require 'srfi-61)' | + | + `http://srfi.schemers.org/srfi-61/srfi-61.html' | + | + -- library syntax: cond <clause1> <clause2> ... | + _Syntax:_ Each <clause> should be of the form | + | + (<test> <expression1> ...) | + | + where <test> is any expression. Alternatively, a <clause> may be | + of the form | + | + (<test> => <expression>) | + | + The <clause> production in the formal syntax of Scheme as written | + by R5RS in section 7.1.3 is extended with a new option: | + | + <clause> => (<generator> <guard> => <receiver>) | + | + where <generator>, <guard>, & <receiver> are all <expression>s. | + | + Clauses of this form have the following semantics: | + <generator> is evaluated. It may return arbitrarily many | + values. <Guard> is applied to an argument list containing | + the values in order that <generator> returned. If <guard> | + returns a true value for that argument list, <receiver> is | + applied with an equivalent argument list. If <guard> returns | + a false value, however, the clause is abandoned and the next | + one is tried. | + | + The last <clause> may be an "else clause," which has the form | + | + (else <expression1> <expression2> ...). | + | +This `port->char-list' procedure accepts an input port and returns a | +list of all the characters it produces until the end. | + | + (define (port->char-list port) | + (cond ((read-char port) char? | + => (lambda (c) (cons c (port->char-list port)))) | + (else '()))) | + | + (call-with-input-string "foo" port->char-list) ==> (#\f #\o #\o) | + | + +File: slib.info, Node: Yasos, Prev: Guarded COND Clause, Up: Scheme Syntax Extension Packages + | +3.13 Yasos | +========== | `(require 'oop)' or `(require 'yasos)' @@ -2116,8 +2211,8 @@ on LISP and Functional Programming, July 1988 [ACM #552880]. File: slib.info, Node: Yasos terms, Next: Yasos interface, Prev: Yasos, Up: Yasos -3.9.1 Terms | ------------ | +3.13.1 Terms | +------------ | "Object" Any Scheme data object. @@ -2147,25 +2242,25 @@ _Disclaimer:_ File: slib.info, Node: Yasos interface, Next: Setters, Prev: Yasos terms, Up: Yasos -3.9.2 Interface | ---------------- | +3.13.2 Interface | +---------------- | - -- Syntax: define-operation `('opname self arg ...`)' DEFAULT-BODY | + -- Syntax: define-operation `('opname self arg ...`)' DEFAULT-BODY Defines a default behavior for data objects which don't handle the operation OPNAME. The default behavior (for an empty DEFAULT-BODY) is to generate an error. - -- Syntax: define-predicate opname? | + -- Syntax: define-predicate opname? Defines a predicate OPNAME?, usually used for determining the "type" of an object, such that `(OPNAME? OBJECT)' returns `#t' if OBJECT has an operation OPNAME? and `#f' otherwise. - -- Syntax: object `((NAME SELF ARG ...) BODY)' ... | + -- Syntax: object `((NAME SELF ARG ...) BODY)' ... Returns an object (an instance of the object system) with operations. Invoking `(NAME OBJECT ARG ...' executes the BODY of the OBJECT with SELF bound to OBJECT and with argument(s) ARG.... - -- Syntax: object-with-ancestors `(('ancestor1 init1`)' ...`)' | + -- Syntax: object-with-ancestors `(('ancestor1 init1`)' ...`)' operation ... A `let'-like form of `object' for multiple inheritance. It returns an object inheriting the behaviour of ANCESTOR1 etc. An @@ -2174,17 +2269,17 @@ File: slib.info, Node: Yasos interface, Next: Setters, Prev: Yasos terms, Up operations with the same identity, the operation used is the one found in the first ancestor in the ancestor list. - -- Syntax: operate-as component operation self arg ... | + -- Syntax: operate-as component operation self arg ... Used in an operation definition (of SELF) to invoke the OPERATION in an ancestor COMPONENT but maintain the object's identity. Also known as "send-to-super". - -- Procedure: print obj port | + -- Procedure: print obj port A default `print' operation is provided which is just `(format PORT OBJ)' (*note Format::) for non-instances and prints OBJ preceded by `#<INSTANCE>' for instances. - -- Function: size obj | + -- Function: size obj The default method returns the number of elements in OBJ if it is a vector, string or list, `2' for a pair, `1' for a character and by default id an error otherwise. Objects such as collections @@ -2193,8 +2288,8 @@ File: slib.info, Node: Yasos interface, Next: Setters, Prev: Yasos terms, Up File: slib.info, Node: Setters, Next: Yasos examples, Prev: Yasos interface, Up: Yasos -3.9.3 Setters | -------------- | +3.13.3 Setters | +-------------- | "Setters" implement "generalized locations" for objects associated with some sort of mutable state. A "getter" operation retrieves a value @@ -2211,7 +2306,7 @@ are predefined, corresponding to getters `car', `cdr', `string-ref' and Research and Technology). Common LISP provides similar facilities through `setf'. - -- Function: setter getter | + -- Function: setter getter Returns the setter for the procedure GETTER. E.g., since `string-ref' is the getter corresponding to a setter which is actually `string-set!': @@ -2219,7 +2314,7 @@ through `setf'. ((setter string-ref) foo 0 #\F) ; set element 0 of foo foo => "Foo" - -- Syntax: set place new-value | + -- Syntax: set place new-value If PLACE is a variable name, `set' is equivalent to `set!'. Otherwise, PLACE must have the form of a procedure call, where the procedure name refers to a getter and the call indicates an @@ -2232,17 +2327,17 @@ through `setf'. (set foo "foo") ; like set! foo => "foo" - -- Procedure: add-setter getter setter | + -- Procedure: add-setter getter setter Add procedures GETTER and SETTER to the (inaccessible) list of valid setter/getter pairs. SETTER implements the store operation corresponding to the GETTER access operation for the relevant state. The return value is unspecified. - -- Procedure: remove-setter-for getter | + -- Procedure: remove-setter-for getter Removes the setter corresponding to the specified GETTER from the list of valid setters. The return value is unspecified. - -- Syntax: define-access-operation getter-name | + -- Syntax: define-access-operation getter-name Shorthand for a Yasos `define-operation' defining an operation GETTER-NAME that objects may support to return the value of some mutable state. The default operation is to signal an error. The @@ -2251,8 +2346,8 @@ through `setf'. File: slib.info, Node: Yasos examples, Prev: Setters, Up: Yasos -3.9.4 Examples | --------------- | +3.13.4 Examples | +--------------- | ;;; These definitions for PRINT and SIZE are ;;; already supplied by @@ -2351,8 +2446,8 @@ File: slib.info, Node: Yasos examples, Prev: Setters, Up: Yasos File: slib.info, Node: Textual Conversion Packages, Next: Mathematical Packages, Prev: Scheme Syntax Extension Packages, Up: Top -4 Textual Conversion Packages | -***************************** | +4 Textual Conversion Packages +***************************** * Menu: @@ -2373,8 +2468,8 @@ File: slib.info, Node: Textual Conversion Packages, Next: Mathematical Package File: slib.info, Node: Precedence Parsing, Next: Format, Prev: Textual Conversion Packages, Up: Textual Conversion Packages -4.1 Precedence Parsing | -====================== | +4.1 Precedence Parsing +====================== `(require 'precedence-parse)' or `(require 'parse)' @@ -2401,8 +2496,8 @@ This package implements: File: slib.info, Node: Precedence Parsing Overview, Next: Rule Types, Prev: Precedence Parsing, Up: Precedence Parsing -4.1.1 Precedence Parsing Overview | ---------------------------------- | +4.1.1 Precedence Parsing Overview +--------------------------------- This package offers improvements over previous parsers. @@ -2434,7 +2529,7 @@ A syntax tree is not built unless the rules explicitly do so. The call graph of grammar rules effectively instantiate the sytnax tree. The JACAL symbolic math system -(`http://swiss.csail.mit.edu/~jaffer/JACAL.html') uses | +(`http://swiss.csail.mit.edu/~jaffer/JACAL.html') uses precedence-parse. Its grammar definitions in the file `jacal/English.scm' can serve as examples of use. @@ -2446,65 +2541,65 @@ file) with a non-trivial grammar utilizing all constructs. File: slib.info, Node: Rule Types, Next: Ruleset Definition and Use, Prev: Precedence Parsing Overview, Up: Precedence Parsing -4.1.2 Rule Types | ----------------- | +4.1.2 Rule Types +---------------- Here are the higher-level syntax types and an example of each. Precedence considerations are omitted for clarity. See *Note Grammar Rule Definition:: for full details. - -- Grammar: nofix bye exit | + -- Grammar: nofix bye exit bye calls the function `exit' with no arguments. - -- Grammar: prefix - negate | + -- Grammar: prefix - negate - 42 Calls the function `negate' with the argument `42'. - -- Grammar: infix - difference | + -- Grammar: infix - difference x - y Calls the function `difference' with arguments `x' and `y'. - -- Grammar: nary + sum | + -- Grammar: nary + sum x + y + z Calls the function `sum' with arguments `x', `y', and `y'. - -- Grammar: postfix ! factorial | + -- Grammar: postfix ! factorial 5 ! Calls the function `factorial' with the argument `5'. - -- Grammar: prestfix set set! | + -- Grammar: prestfix set set! set foo bar Calls the function `set!' with the arguments `foo' and `bar'. - -- Grammar: commentfix /* */ | + -- Grammar: commentfix /* */ /* almost any text here */ Ignores the comment delimited by `/*' and `*/'. - -- Grammar: matchfix { list } | + -- Grammar: matchfix { list } {0, 1, 2} Calls the function `list' with the arguments `0', `1', and `2'. - -- Grammar: inmatchfix ( funcall ) | + -- Grammar: inmatchfix ( funcall ) f(x, y) Calls the function `funcall' with the arguments `f', `x', and `y'. - -- Grammar: delim ; | + -- Grammar: delim ; set foo bar; delimits the extent of the restfix operator `set'. File: slib.info, Node: Ruleset Definition and Use, Next: Token definition, Prev: Rule Types, Up: Precedence Parsing -4.1.3 Ruleset Definition and Use | --------------------------------- | +4.1.3 Ruleset Definition and Use +-------------------------------- - -- Variable: *syn-defs* | + -- Variable: *syn-defs* A grammar is built by one or more calls to `prec:define-grammar'. The rules are appended to *SYN-DEFS*. The value of *SYN-DEFS* is the grammar suitable for passing as an argument to `prec:parse'. - -- Constant: *syn-ignore-whitespace* | + -- Constant: *syn-ignore-whitespace* Is a nearly empty grammar with whitespace characters set to group 0, which means they will not be made into tokens. Most rulesets will want to start with `*syn-ignore-whitespace*' @@ -2516,7 +2611,7 @@ In order to start defining a grammar, either (set! *syn-defs* *syn-ignore-whitespace*) - -- Function: prec:define-grammar rule1 ... | + -- Function: prec:define-grammar rule1 ... Appends RULE1 ... to *SYN-DEFS*. `prec:define-grammar' is used to define both the character classes and rules for tokens. @@ -2525,8 +2620,8 @@ variable (for use when calling `prec:parse'). (define my-ruleset *syn-defs*) - -- Function: prec:parse ruleset delim | - -- Function: prec:parse ruleset delim port | + -- Function: prec:parse ruleset delim + -- Function: prec:parse ruleset delim port The RULESET argument must be a list of rules as constructed by `prec:define-grammar' and extracted from *SYN-DEFS*. @@ -2555,10 +2650,10 @@ variable (for use when calling `prec:parse'). File: slib.info, Node: Token definition, Next: Nud and Led Definition, Prev: Ruleset Definition and Use, Up: Precedence Parsing -4.1.4 Token definition | ----------------------- | +4.1.4 Token definition +---------------------- - -- Function: tok:char-group group chars chars-proc | + -- Function: tok:char-group group chars chars-proc The argument CHARS may be a single character, a list of characters, or a string. Each character in CHARS is treated as though `tok:char-group' was called with that character alone. @@ -2592,18 +2687,18 @@ File: slib.info, Node: Token definition, Next: Nud and Led Definition, Prev: The following convenient constants are provided for use with `tok:char-group'. - -- Constant: tok:decimal-digits | + -- Constant: tok:decimal-digits Is the string `"0123456789"'. - -- Constant: tok:upper-case | + -- Constant: tok:upper-case Is the string consisting of all upper-case letters ("ABCDEFGHIJKLMNOPQRSTUVWXYZ"). - -- Constant: tok:lower-case | + -- Constant: tok:lower-case Is the string consisting of all lower-case letters ("abcdefghijklmnopqrstuvwxyz"). - -- Constant: tok:whitespaces | + -- Constant: tok:whitespaces Is the string consisting of all characters between 0 and 255 for which `char-whitespace?' returns true. @@ -2612,14 +2707,14 @@ keeps track of the "current column". When the column does not simply track input characters, `tok:bump-column' can be used to adjust the current-column. - -- Function: tok:bump-column pos port | + -- Function: tok:bump-column pos port Adds POS to the current-column for input-port PORT. File: slib.info, Node: Nud and Led Definition, Next: Grammar Rule Definition, Prev: Token definition, Up: Precedence Parsing -4.1.5 Nud and Led Definition | ----------------------------- | +4.1.5 Nud and Led Definition +---------------------------- This section describes advanced features. You can skip this section on first reading. @@ -2653,7 +2748,7 @@ Character TK arguments will match only character tokens; i.e. characters for which no token-group is assigned. Symbols and strings will both match token strings; i.e. tokens resulting from token groups. - -- Function: prec:make-nud tk sop arg1 ... | + -- Function: prec:make-nud tk sop arg1 ... Returns a rule specifying that SOP be called when TK is parsed. If SOP is a procedure, it is called with TK and ARG1 ... as its arguments; the resulting value is incorporated into the expression @@ -2663,7 +2758,7 @@ If no NUD has been defined for a token; then if that token is a string, it is converted to a symbol and returned; if not a string, the token is returned. - -- Function: prec:make-led tk sop arg1 ... | + -- Function: prec:make-led tk sop arg1 ... Returns a rule specifying that SOP be called when TK is parsed and LEFT has an unclaimed parsed expression. If SOP is a procedure, it is called with LEFT, TK, and ARG1 ... as its arguments; the @@ -2676,8 +2771,8 @@ issues a warning. File: slib.info, Node: Grammar Rule Definition, Prev: Nud and Led Definition, Up: Precedence Parsing -4.1.6 Grammar Rule Definition | ------------------------------ | +4.1.6 Grammar Rule Definition +----------------------------- Here are procedures for defining rules for the syntax types introduced in *Note Precedence Parsing Overview::. @@ -2696,19 +2791,19 @@ Character TK arguments will match only character tokens; i.e. characters for which no token-group is assigned. Symbols and strings will both match token strings; i.e. tokens resulting from token groups. - -- Function: prec:delim tk | + -- Function: prec:delim tk Returns a rule specifying that TK should not be returned from parsing; i.e. TK's function is purely syntactic. The end-of-file is always treated as a delimiter. - -- Function: prec:nofix tk sop | + -- Function: prec:nofix tk sop Returns a rule specifying the following actions take place when TK is parsed: * If SOP is a procedure, it is called with no arguments; the resulting value is incorporated into the expression being built. Otherwise, the list of SOP is incorporated. - -- Function: prec:prefix tk sop bp rule1 ... | + -- Function: prec:prefix tk sop bp rule1 ... Returns a rule specifying the following actions take place when TK is parsed: * The rules RULE1 ... augment and, in case of conflict, override @@ -2725,7 +2820,7 @@ will both match token strings; i.e. tokens resulting from token groups. * The ruleset in effect before TK was parsed is restored; RULE1 ... are forgotten. - -- Function: prec:infix tk sop lbp bp rule1 ... | + -- Function: prec:infix tk sop lbp bp rule1 ... Returns a rule declaring the left-binding-precedence of the token TK is LBP and specifying the following actions take place when TK is parsed: @@ -2744,7 +2839,7 @@ will both match token strings; i.e. tokens resulting from token groups. * The ruleset in effect before TK was parsed is restored; RULE1 ... are forgotten. - -- Function: prec:nary tk sop bp | + -- Function: prec:nary tk sop bp Returns a rule declaring the left-binding-precedence of the token TK is BP and specifying the following actions take place when TK is parsed: @@ -2757,7 +2852,7 @@ will both match token strings; i.e. tokens resulting from token groups. the LEFT expression, and the parsed expressions is incorporated. - -- Function: prec:postfix tk sop lbp | + -- Function: prec:postfix tk sop lbp Returns a rule declaring the left-binding-precedence of the token TK is LBP and specifying the following actions take place when TK is parsed: @@ -2766,7 +2861,7 @@ will both match token strings; i.e. tokens resulting from token groups. built. Otherwise, the list of SOP and the LEFT expression is incorporated. - -- Function: prec:prestfix tk sop bp rule1 ... | + -- Function: prec:prestfix tk sop bp rule1 ... Returns a rule specifying the following actions take place when TK is parsed: * The rules RULE1 ... augment and, in case of conflict, override @@ -2783,7 +2878,7 @@ will both match token strings; i.e. tokens resulting from token groups. * The ruleset in effect before TK was parsed is restored; RULE1 ... are forgotten. - -- Function: prec:commentfix tk stp match rule1 ... | + -- Function: prec:commentfix tk stp match rule1 ... Returns rules specifying the following actions take place when TK is parsed: * The rules RULE1 ... augment and, in case of conflict, override @@ -2803,7 +2898,7 @@ will both match token strings; i.e. tokens resulting from token groups. STP but does not return its value; nay any value. I added the STP argument so that comment text could be echoed. - -- Function: prec:matchfix tk sop sep match rule1 ... | + -- Function: prec:matchfix tk sop sep match rule1 ... Returns a rule specifying the following actions take place when TK is parsed: * The rules RULE1 ... augment and, in case of conflict, override @@ -2823,7 +2918,7 @@ will both match token strings; i.e. tokens resulting from token groups. * The ruleset in effect before TK was parsed is restored; RULE1 ... are forgotten. - -- Function: prec:inmatchfix tk sop sep match lbp rule1 ... | + -- Function: prec:inmatchfix tk sop sep match lbp rule1 ... Returns a rule declaring the left-binding-precedence of the token TK is LBP and specifying the following actions take place when TK is parsed: @@ -2848,520 +2943,520 @@ will both match token strings; i.e. tokens resulting from token groups. File: slib.info, Node: Format, Next: Standard Formatted I/O, Prev: Precedence Parsing, Up: Textual Conversion Packages -4.2 Format (version 3.1) | -======================== | +4.2 Format (version 3.1) +======================== + +`(require 'format)' + +* Menu: + +* Format Interface:: +* Format Specification:: -`(require 'format)' | - | -* Menu: | - | -* Format Interface:: | -* Format Specification:: | - | File: slib.info, Node: Format Interface, Next: Format Specification, Prev: Format, Up: Format - | -4.2.1 Format Interface | ----------------------- | - | - -- Function: format destination format-string . arguments | - An almost complete implementation of Common LISP format description | - according to the CL reference book `Common LISP' from Guy L. | - Steele, Digital Press. Backward compatible to most of the | - available Scheme format implementations. | - | - Returns `#t', `#f' or a string; has side effect of printing | - according to FORMAT-STRING. If DESTINATION is `#t', the output is | - to the current output port and `#t' is returned. If DESTINATION | - is `#f', a formatted string is returned as the result of the call. | - NEW: If DESTINATION is a string, DESTINATION is regarded as the | - format string; FORMAT-STRING is then the first argument and the | - output is returned as a string. If DESTINATION is a number, the | - output is to the current error port if available by the | - implementation. Otherwise DESTINATION must be an output port and | - `#t' is returned. | - | - FORMAT-STRING must be a string. In case of a formatting error | - format returns `#f' and prints a message on the current output or | - error port. Characters are output as if the string were output by | - the `display' function with the exception of those prefixed by a | - tilde (~). For a detailed description of the FORMAT-STRING syntax | - please consult a Common LISP format reference manual. For a test | - suite to verify this format implementation load `formatst.scm'. | - Please send bug reports to `lutzeb@cs.tu-berlin.de'. | - | - Note: `format' is not reentrant, i.e. only one `format'-call may | - be executed at a time. | - | - | + +4.2.1 Format Interface +---------------------- + + -- Function: format destination format-string . arguments + An almost complete implementation of Common LISP format description + according to the CL reference book `Common LISP' from Guy L. + Steele, Digital Press. Backward compatible to most of the + available Scheme format implementations. + + Returns `#t', `#f' or a string; has side effect of printing + according to FORMAT-STRING. If DESTINATION is `#t', the output is + to the current output port and `#t' is returned. If DESTINATION + is `#f', a formatted string is returned as the result of the call. + NEW: If DESTINATION is a string, DESTINATION is regarded as the + format string; FORMAT-STRING is then the first argument and the + output is returned as a string. If DESTINATION is a number, the + output is to the current error port if available by the + implementation. Otherwise DESTINATION must be an output port and + `#t' is returned. + + FORMAT-STRING must be a string. In case of a formatting error + format returns `#f' and prints a message on the current output or + error port. Characters are output as if the string were output by + the `display' function with the exception of those prefixed by a + tilde (~). For a detailed description of the FORMAT-STRING syntax + please consult a Common LISP format reference manual. For a test + suite to verify this format implementation load `formatst.scm'. + Please send bug reports to `lutzeb@cs.tu-berlin.de'. + + Note: `format' is not reentrant, i.e. only one `format'-call may + be executed at a time. + + File: slib.info, Node: Format Specification, Prev: Format Interface, Up: Format - | -4.2.2 Format Specification (Format version 3.1) | ------------------------------------------------ | - | -Please consult a Common LISP format reference manual for a detailed | -description of the format string syntax. For a demonstration of the | -implemented directives see `formatst.scm'. | - | - This implementation supports directive parameters and modifiers (`:' | -and `@' characters). Multiple parameters must be separated by a comma | -(`,'). Parameters can be numerical parameters (positive or negative), | -character parameters (prefixed by a quote character (`''), variable | -parameters (`v'), number of rest arguments parameter (`#'), empty and | -default parameters. Directive characters are case independent. The | -general form of a directive is: | - | -DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER | - | -DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ] | - | -4.2.2.1 Implemented CL Format Control Directives | -................................................ | - | -Documentation syntax: Uppercase characters represent the corresponding | -control directive characters. Lowercase characters represent control | -directive parameter descriptions. | - | -`~A' | - Any (print as `display' does). | - `~@A' | - left pad. | - | - `~MINCOL,COLINC,MINPAD,PADCHARA' | - full padding. | - | -`~S' | - S-expression (print as `write' does). | - `~@S' | - left pad. | - | - `~MINCOL,COLINC,MINPAD,PADCHARS' | - full padding. | - | -`~D' | - Decimal. | - `~@D' | - print number sign always. | - | - `~:D' | - print comma separated. | - | - `~MINCOL,PADCHAR,COMMACHARD' | - padding. | - | -`~X' | - Hexadecimal. | - `~@X' | - print number sign always. | - | - `~:X' | - print comma separated. | - | - `~MINCOL,PADCHAR,COMMACHARX' | - padding. | - | -`~O' | - Octal. | - `~@O' | - print number sign always. | - | - `~:O' | - print comma separated. | - | - `~MINCOL,PADCHAR,COMMACHARO' | - padding. | - | -`~B' | - Binary. | - `~@B' | - print number sign always. | - | - `~:B' | - print comma separated. | - | - `~MINCOL,PADCHAR,COMMACHARB' | - padding. | - | -`~NR' | - Radix N. | - `~N,MINCOL,PADCHAR,COMMACHARR' | - padding. | - | -`~@R' | - print a number as a Roman numeral. | - | -`~:@R' | - print a number as an "old fashioned" Roman numeral. | - | -`~:R' | - print a number as an ordinal English number. | - | -`~R' | - print a number as a cardinal English number. | - | -`~P' | - Plural. | - `~@P' | - prints `y' and `ies'. | - | - `~:P' | - as `~P but jumps 1 argument backward.' | - | - `~:@P' | - as `~@P but jumps 1 argument backward.' | - | -`~C' | - Character. | - `~@C' | - prints a character as the reader can understand it (i.e. `#\' | - prefixing). | - | - `~:C' | - prints a character as emacs does (eg. `^C' for ASCII 03). | - | -`~F' | - Fixed-format floating-point (prints a flonum like MMM.NNN). | - `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF' | - | - `~@F' | - If the number is positive a plus sign is printed. | - | -`~E' | - Exponential floating-point (prints a flonum like MMM.NNN`E'EE). | - `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE' | - | - `~@E' | - If the number is positive a plus sign is printed. | - | -`~G' | - General floating-point (prints a flonum either fixed or | - exponential). | - `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG' | - | - `~@G' | - If the number is positive a plus sign is printed. | - | -`~$' | - Dollars floating-point (prints a flonum in fixed with signs | - separated). | - `~DIGITS,SCALE,WIDTH,PADCHAR$' | - | - `~@$' | - If the number is positive a plus sign is printed. | - | - `~:@$' | - A sign is always printed and appears before the padding. | - | - `~:$' | - The sign appears before the padding. | - | -`~%' | - Newline. | - `~N%' | - print N newlines. | - | -`~&' | - print newline if not at the beginning of the output line. | - `~N&' | - prints `~&' and then N-1 newlines. | - | -`~|' | - Page Separator. | - `~N|' | - print N page separators. | - | -`~~' | - Tilde. | - `~N~' | - print N tildes. | - | -`~'<newline> | - Continuation Line. | - `~:'<newline> | - newline is ignored, white space left. | - | - `~@'<newline> | - newline is left, white space ignored. | - | -`~T' | - Tabulation. | - `~@T' | - relative tabulation. | - | - `~COLNUM,COLINCT' | - full tabulation. | - | -`~?' | - Indirection (expects indirect arguments as a list). | - `~@?' | - extracts indirect arguments from format arguments. | - | -`~(STR~)' | - Case conversion (converts by `string-downcase'). | - `~:(STR~)' | - converts by `string-capitalize'. | - | - `~@(STR~)' | - converts by `string-capitalize-first'. | - | - `~:@(STR~)' | - converts by `string-upcase'. | - | -`~*' | - Argument Jumping (jumps 1 argument forward). | - `~N*' | - jumps N arguments forward. | - | - `~:*' | - jumps 1 argument backward. | - | - `~N:*' | - jumps N arguments backward. | - | - `~@*' | - jumps to the 0th argument. | - | - `~N@*' | - jumps to the Nth argument (beginning from 0) | - | -`~[STR0~;STR1~;...~;STRN~]' | - Conditional Expression (numerical clause conditional). | - `~N[' | - take argument from N. | - | - `~@[' | - true test conditional. | - | - `~:[' | - if-else-then conditional. | - | - `~;' | - clause separator. | - | - `~:;' | - default clause follows. | - | -`~{STR~}' | - Iteration (args come from the next argument (a list)). Iteration | - bounding is controlled by configuration variables | - FORMAT:ITERATION-BOUNDED and FORMAT:MAX-ITERATIONS. With both | - variables default, a maximum of 100 iterations will be performed. | - `~N{' | - at most N iterations. | - | - `~:{' | - args from next arg (a list of lists). | - | - `~@{' | - args from the rest of arguments. | - | - `~:@{' | - args from the rest args (lists). | - | -`~^' | - Up and out. | - `~N^' | - aborts if N = 0 | - | - `~N,M^' | - aborts if N = M | - | - `~N,M,K^' | - aborts if N <= M <= K | - | -4.2.2.2 Not Implemented CL Format Control Directives | -.................................................... | - | -`~:A' | - print `#f' as an empty list (see below). | - | -`~:S' | - print `#f' as an empty list (see below). | - | -`~<~>' | - Justification. | - | -`~:^' | - (sorry I don't understand its semantics completely) | - | -4.2.2.3 Extended, Replaced and Additional Control Directives | -............................................................ | - | -`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD' | - | -`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX' | - | -`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO' | - | -`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB' | - | -`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR' | - COMMAWIDTH is the number of characters between two comma | - characters. | - | -`~I' | - print a R4RS complex number as `~F~@Fi' with passed parameters for | - `~F'. | - | -`~Y' | - Pretty print formatting of an argument for scheme code lists. | - | -`~K' | - Same as `~?.' | - | -`~!' | - Flushes the output if format DESTINATION is a port. | - | -`~_' | - Print a `#\space' character | - `~N_' | - print N `#\space' characters. | - | -`~/' | - Print a `#\tab' character | - `~N/' | - print N `#\tab' characters. | - | -`~NC' | - Takes N as an integer representation for a character. No arguments | - are consumed. N is converted to a character by `integer->char'. N | - must be a positive decimal number. | - | -`~:S' | - Print out readproof. Prints out internal objects represented as | - `#<...>' as strings `"#<...>"' so that the format output can always | - be processed by `read'. | - | -`~:A' | - Print out readproof. Prints out internal objects represented as | - `#<...>' as strings `"#<...>"' so that the format output can always | - be processed by `read'. | - | -`~Q' | - Prints information and a copyright notice on the format | - implementation. | - `~:Q' | - prints format version. | - | -`~F, ~E, ~G, ~$' | - may also print number strings, i.e. passing a number as a string | - and format it accordingly. | - | -4.2.2.4 Configuration Variables | -............................... | - | -Format has some configuration variables at the beginning of | -`format.scm' to suit the systems and users needs. There should be no | -modification necessary for the configuration that comes with SLIB. If | -modification is desired the variable should be set after the format | -code is loaded. Format detects automatically if the running scheme | -system implements floating point numbers and complex numbers. | - | -FORMAT:SYMBOL-CASE-CONV | - Symbols are converted by `symbol->string' so the case type of the | - printed symbols is implementation dependent. | - `format:symbol-case-conv' is a one arg closure which is either | - `#f' (no conversion), `string-upcase', `string-downcase' or | - `string-capitalize'. (default `#f') | - | -FORMAT:IOBJ-CASE-CONV | - As FORMAT:SYMBOL-CASE-CONV but applies for the representation of | - implementation internal objects. (default `#f') | - | -FORMAT:EXPCH | - The character prefixing the exponent value in `~E' printing. | - (default `#\E') | - | -FORMAT:ITERATION-BOUNDED | - When `#t', a `~{...~}' control will iterate no more than the | - number of times specified by FORMAT:MAX-ITERATIONS regardless of | - the number of iterations implied by modifiers and arguments. When | - `#f', a `~{...~}' control will iterate the number of times implied | - by modifiers and arguments, unless termination is forced by | - language or system limitations. (default `#t') | - | -FORMAT:MAX-ITERATIONS | - The maximum number of iterations performed by a `~{...~}' control. | - Has effect only when FORMAT:ITERATION-BOUNDED is `#t'. (default | - 100) | - | - | -4.2.2.5 Compatibility With Other Format Implementations | -....................................................... | - | -SLIB format 2.x: | - See `format.doc'. | - | -SLIB format 1.4: | - Downward compatible except for padding support and `~A', `~S', | - `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style | - `printf' padding support which is completely replaced by the CL | - `format' padding style. | - | -MIT C-Scheme 7.1: | - Downward compatible except for `~', which is not documented | - (ignores all characters inside the format string up to a newline | - character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%', | - numerical and variable parameters and `:/@' modifiers in the CL | - sense). | - | -Elk 1.5/2.0: | - Downward compatible except for `~A' and `~S' which print in | - uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no | - directive parameters or modifiers)). | - | -Scheme->C 01nov91: | - Downward compatible except for an optional destination parameter: | - S2C accepts a format call without a destination which returns a | - formatted string. This is equivalent to a #f destination in S2C. | - (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive | - parameters or modifiers)). | - | - | - This implementation of format is solely useful in the SLIB context | -because it requires other components provided by SLIB. | + +4.2.2 Format Specification (Format version 3.1) +----------------------------------------------- + +Please consult a Common LISP format reference manual for a detailed +description of the format string syntax. For a demonstration of the +implemented directives see `formatst.scm'. + + This implementation supports directive parameters and modifiers (`:' +and `@' characters). Multiple parameters must be separated by a comma +(`,'). Parameters can be numerical parameters (positive or negative), +character parameters (prefixed by a quote character (`''), variable +parameters (`v'), number of rest arguments parameter (`#'), empty and +default parameters. Directive characters are case independent. The +general form of a directive is: + +DIRECTIVE ::= ~{DIRECTIVE-PARAMETER,}[:][@]DIRECTIVE-CHARACTER + +DIRECTIVE-PARAMETER ::= [ [-|+]{0-9}+ | 'CHARACTER | v | # ] + +4.2.2.1 Implemented CL Format Control Directives +................................................ + +Documentation syntax: Uppercase characters represent the corresponding +control directive characters. Lowercase characters represent control +directive parameter descriptions. + +`~A' + Any (print as `display' does). + `~@A' + left pad. + + `~MINCOL,COLINC,MINPAD,PADCHARA' + full padding. + +`~S' + S-expression (print as `write' does). + `~@S' + left pad. + + `~MINCOL,COLINC,MINPAD,PADCHARS' + full padding. + +`~D' + Decimal. + `~@D' + print number sign always. + + `~:D' + print comma separated. + + `~MINCOL,PADCHAR,COMMACHARD' + padding. + +`~X' + Hexadecimal. + `~@X' + print number sign always. + + `~:X' + print comma separated. + + `~MINCOL,PADCHAR,COMMACHARX' + padding. + +`~O' + Octal. + `~@O' + print number sign always. + + `~:O' + print comma separated. + + `~MINCOL,PADCHAR,COMMACHARO' + padding. + +`~B' + Binary. + `~@B' + print number sign always. + + `~:B' + print comma separated. + + `~MINCOL,PADCHAR,COMMACHARB' + padding. + +`~NR' + Radix N. + `~N,MINCOL,PADCHAR,COMMACHARR' + padding. + +`~@R' + print a number as a Roman numeral. + +`~:@R' + print a number as an "old fashioned" Roman numeral. + +`~:R' + print a number as an ordinal English number. + +`~R' + print a number as a cardinal English number. + +`~P' + Plural. + `~@P' + prints `y' and `ies'. + + `~:P' + as `~P but jumps 1 argument backward.' + + `~:@P' + as `~@P but jumps 1 argument backward.' + +`~C' + Character. + `~@C' + prints a character as the reader can understand it (i.e. `#\' + prefixing). + + `~:C' + prints a character as emacs does (eg. `^C' for ASCII 03). + +`~F' + Fixed-format floating-point (prints a flonum like MMM.NNN). + `~WIDTH,DIGITS,SCALE,OVERFLOWCHAR,PADCHARF' + + `~@F' + If the number is positive a plus sign is printed. + +`~E' + Exponential floating-point (prints a flonum like MMM.NNN`E'EE). + `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARE' + + `~@E' + If the number is positive a plus sign is printed. + +`~G' + General floating-point (prints a flonum either fixed or + exponential). + `~WIDTH,DIGITS,EXPONENTDIGITS,SCALE,OVERFLOWCHAR,PADCHAR,EXPONENTCHARG' + + `~@G' + If the number is positive a plus sign is printed. + +`~$' + Dollars floating-point (prints a flonum in fixed with signs + separated). + `~DIGITS,SCALE,WIDTH,PADCHAR$' + + `~@$' + If the number is positive a plus sign is printed. + + `~:@$' + A sign is always printed and appears before the padding. + + `~:$' + The sign appears before the padding. + +`~%' + Newline. + `~N%' + print N newlines. + +`~&' + print newline if not at the beginning of the output line. + `~N&' + prints `~&' and then N-1 newlines. + +`~|' + Page Separator. + `~N|' + print N page separators. + +`~~' + Tilde. + `~N~' + print N tildes. + +`~'<newline> + Continuation Line. + `~:'<newline> + newline is ignored, white space left. + + `~@'<newline> + newline is left, white space ignored. + +`~T' + Tabulation. + `~@T' + relative tabulation. + + `~COLNUM,COLINCT' + full tabulation. + +`~?' + Indirection (expects indirect arguments as a list). + `~@?' + extracts indirect arguments from format arguments. + +`~(STR~)' + Case conversion (converts by `string-downcase'). + `~:(STR~)' + converts by `string-capitalize'. + + `~@(STR~)' + converts by `string-capitalize-first'. + + `~:@(STR~)' + converts by `string-upcase'. + +`~*' + Argument Jumping (jumps 1 argument forward). + `~N*' + jumps N arguments forward. + + `~:*' + jumps 1 argument backward. + + `~N:*' + jumps N arguments backward. + + `~@*' + jumps to the 0th argument. + + `~N@*' + jumps to the Nth argument (beginning from 0) + +`~[STR0~;STR1~;...~;STRN~]' + Conditional Expression (numerical clause conditional). + `~N[' + take argument from N. + + `~@[' + true test conditional. + + `~:[' + if-else-then conditional. + + `~;' + clause separator. + + `~:;' + default clause follows. + +`~{STR~}' + Iteration (args come from the next argument (a list)). Iteration + bounding is controlled by configuration variables + FORMAT:ITERATION-BOUNDED and FORMAT:MAX-ITERATIONS. With both + variables default, a maximum of 100 iterations will be performed. + `~N{' + at most N iterations. + + `~:{' + args from next arg (a list of lists). + + `~@{' + args from the rest of arguments. + + `~:@{' + args from the rest args (lists). + +`~^' + Up and out. + `~N^' + aborts if N = 0 + + `~N,M^' + aborts if N = M + + `~N,M,K^' + aborts if N <= M <= K + +4.2.2.2 Not Implemented CL Format Control Directives +.................................................... + +`~:A' + print `#f' as an empty list (see below). + +`~:S' + print `#f' as an empty list (see below). + +`~<~>' + Justification. + +`~:^' + (sorry I don't understand its semantics completely) + +4.2.2.3 Extended, Replaced and Additional Control Directives +............................................................ + +`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHD' + +`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHX' + +`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHO' + +`~MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHB' + +`~N,MINCOL,PADCHAR,COMMACHAR,COMMAWIDTHR' + COMMAWIDTH is the number of characters between two comma + characters. + +`~I' + print a R4RS complex number as `~F~@Fi' with passed parameters for + `~F'. + +`~Y' + Pretty print formatting of an argument for scheme code lists. + +`~K' + Same as `~?.' + +`~!' + Flushes the output if format DESTINATION is a port. + +`~_' + Print a `#\space' character + `~N_' + print N `#\space' characters. + +`~/' + Print a `#\tab' character + `~N/' + print N `#\tab' characters. + +`~NC' + Takes N as an integer representation for a character. No arguments + are consumed. N is converted to a character by `integer->char'. N + must be a positive decimal number. + +`~:S' + Print out readproof. Prints out internal objects represented as + `#<...>' as strings `"#<...>"' so that the format output can always + be processed by `read'. + +`~:A' + Print out readproof. Prints out internal objects represented as + `#<...>' as strings `"#<...>"' so that the format output can always + be processed by `read'. + +`~Q' + Prints information and a copyright notice on the format + implementation. + `~:Q' + prints format version. + +`~F, ~E, ~G, ~$' + may also print number strings, i.e. passing a number as a string + and format it accordingly. + +4.2.2.4 Configuration Variables +............................... + +Format has some configuration variables at the beginning of +`format.scm' to suit the systems and users needs. There should be no +modification necessary for the configuration that comes with SLIB. If +modification is desired the variable should be set after the format +code is loaded. Format detects automatically if the running scheme +system implements floating point numbers and complex numbers. + +FORMAT:SYMBOL-CASE-CONV + Symbols are converted by `symbol->string' so the case type of the + printed symbols is implementation dependent. + `format:symbol-case-conv' is a one arg closure which is either + `#f' (no conversion), `string-upcase', `string-downcase' or + `string-capitalize'. (default `#f') + +FORMAT:IOBJ-CASE-CONV + As FORMAT:SYMBOL-CASE-CONV but applies for the representation of + implementation internal objects. (default `#f') + +FORMAT:EXPCH + The character prefixing the exponent value in `~E' printing. + (default `#\E') + +FORMAT:ITERATION-BOUNDED + When `#t', a `~{...~}' control will iterate no more than the + number of times specified by FORMAT:MAX-ITERATIONS regardless of + the number of iterations implied by modifiers and arguments. When + `#f', a `~{...~}' control will iterate the number of times implied + by modifiers and arguments, unless termination is forced by + language or system limitations. (default `#t') + +FORMAT:MAX-ITERATIONS + The maximum number of iterations performed by a `~{...~}' control. + Has effect only when FORMAT:ITERATION-BOUNDED is `#t'. (default + 100) + + +4.2.2.5 Compatibility With Other Format Implementations +....................................................... + +SLIB format 2.x: + See `format.doc'. + +SLIB format 1.4: + Downward compatible except for padding support and `~A', `~S', + `~P', `~X' uppercase printing. SLIB format 1.4 uses C-style + `printf' padding support which is completely replaced by the CL + `format' padding style. + +MIT C-Scheme 7.1: + Downward compatible except for `~', which is not documented + (ignores all characters inside the format string up to a newline + character). (7.1 implements `~a', `~s', ~NEWLINE, `~~', `~%', + numerical and variable parameters and `:/@' modifiers in the CL + sense). + +Elk 1.5/2.0: + Downward compatible except for `~A' and `~S' which print in + uppercase. (Elk implements `~a', `~s', `~~', and `~%' (no + directive parameters or modifiers)). + +Scheme->C 01nov91: + Downward compatible except for an optional destination parameter: + S2C accepts a format call without a destination which returns a + formatted string. This is equivalent to a #f destination in S2C. + (S2C implements `~a', `~s', `~c', `~%', and `~~' (no directive + parameters or modifiers)). + + + This implementation of format is solely useful in the SLIB context +because it requires other components provided by SLIB. File: slib.info, Node: Standard Formatted I/O, Next: Programs and Arguments, Prev: Format, Up: Textual Conversion Packages -4.3 Standard Formatted I/O | -========================== | +4.3 Standard Formatted I/O +========================== * Menu: * Standard Formatted Output:: 'printf * Standard Formatted Input:: 'scanf -4.3.1 stdio | ------------ | +4.3.1 stdio +----------- `(require 'stdio)' `require's `printf' and `scanf' and additionally defines the symbols: - -- Variable: stdin | + -- Variable: stdin Defined to be `(current-input-port)'. - -- Variable: stdout | + -- Variable: stdout Defined to be `(current-output-port)'. - -- Variable: stderr | + -- Variable: stderr Defined to be `(current-error-port)'. File: slib.info, Node: Standard Formatted Output, Next: Standard Formatted Input, Prev: Standard Formatted I/O, Up: Standard Formatted I/O -4.3.2 Standard Formatted Output | -------------------------------- | +4.3.2 Standard Formatted Output +------------------------------- `(require 'printf)' - -- Procedure: printf format arg1 ... | - -- Procedure: fprintf port format arg1 ... | - -- Procedure: sprintf str format arg1 ... | - -- Procedure: sprintf #f format arg1 ... | - -- Procedure: sprintf k format arg1 ... | + -- Procedure: printf format arg1 ... + -- Procedure: fprintf port format arg1 ... + -- Procedure: sprintf str format arg1 ... + -- Procedure: sprintf #f format arg1 ... + -- Procedure: sprintf k format arg1 ... Each function converts, formats, and outputs its ARG1 ... arguments according to the control string FORMAT argument and returns the number of characters output. @@ -3487,8 +3582,8 @@ File: slib.info, Node: Standard Formatted Output, Next: Standard Formatted Inp * A character that specifies the conversion to be applied. -4.3.2.1 Exact Conversions | -......................... | +4.3.2.1 Exact Conversions +......................... `b', `B' Print an integer as an unsigned binary number. @@ -3511,8 +3606,8 @@ File: slib.info, Node: Standard Formatted Output, Next: Standard Formatted Inp prints using the digits `0123456789abcdef'. `%X' prints using the digits `0123456789ABCDEF'. -4.3.2.2 Inexact Conversions | -........................... | +4.3.2.2 Inexact Conversions +........................... `f' Print a floating-point number in fixed-point notation. @@ -3532,12 +3627,12 @@ File: slib.info, Node: Standard Formatted Output, Next: Standard Formatted Inp `k', `K' Print a number like `%g', except that an SI prefix is output - after the number, which is scaled accordingly. `%K' outputs a | - dot between number and prefix, `%k' does not. | + after the number, which is scaled accordingly. `%K' outputs a + dot between number and prefix, `%k' does not. -4.3.2.3 Other Conversions | -......................... | +4.3.2.3 Other Conversions +......................... `c' Print a single character. The `-' flag is the only one which @@ -3567,18 +3662,18 @@ File: slib.info, Node: Standard Formatted Output, Next: Standard Formatted Inp File: slib.info, Node: Standard Formatted Input, Prev: Standard Formatted Output, Up: Standard Formatted I/O -4.3.3 Standard Formatted Input | ------------------------------- | +4.3.3 Standard Formatted Input +------------------------------ `(require 'scanf)' - -- Function: scanf-read-list format | - -- Function: scanf-read-list format port | - -- Function: scanf-read-list format string | + -- Function: scanf-read-list format + -- Function: scanf-read-list format port + -- Function: scanf-read-list format string - -- Macro: scanf format arg1 ... | - -- Macro: fscanf port format arg1 ... | - -- Macro: sscanf str format arg1 ... | + -- Macro: scanf format arg1 ... + -- Macro: fscanf port format arg1 ... + -- Macro: sscanf str format arg1 ... Each function reads characters, interpreting them according to the control string FORMAT argument. @@ -3726,8 +3821,8 @@ File: slib.info, Node: Standard Formatted Input, Prev: Standard Formatted Outp File: slib.info, Node: Programs and Arguments, Next: HTML, Prev: Standard Formatted I/O, Up: Textual Conversion Packages -4.4 Program and Arguments | -========================= | +4.4 Program and Arguments +========================= * Menu: @@ -3741,8 +3836,8 @@ File: slib.info, Node: Programs and Arguments, Next: HTML, Prev: Standard For File: slib.info, Node: Getopt, Next: Command Line, Prev: Programs and Arguments, Up: Programs and Arguments -4.4.1 Getopt | ------------- | +4.4.1 Getopt +------------ `(require 'getopt)' @@ -3762,21 +3857,21 @@ mismatch existed for years in a SLIB `getopt--' example. I have removed the ARGC and ARGV arguments to getopt procedures; and replaced them with a global variable: - -- Variable: *argv* | + -- Variable: *argv* Define *ARGV* with a list of arguments before calling getopt procedures. If you don't want the first (0th) element to be ignored, set *OPTIND* to 0 (after requiring getopt). - -- Variable: *optind* | + -- Variable: *optind* Is the index of the current element of the command line. It is initially one. In order to parse a new command line or reparse an old one, *OPTIND* must be reset. - -- Variable: *optarg* | + -- Variable: *optarg* Is set by getopt to the (string) option-argument of the current option. - -- Function: getopt optstring | + -- Function: getopt optstring Returns the next option letter in *ARGV* (starting from `(vector-ref argv *optind*)') that matches a letter in OPTSTRING. *ARGV* is a vector or list of strings, the 0th of which getopt @@ -3859,10 +3954,10 @@ replaced them with a global variable: (slib:exit) -4.4.2 Getopt-- | --------------- | +4.4.2 Getopt-- +-------------- - -- Function: `getopt--' optstring | + -- Function: `getopt--' optstring The procedure `getopt--' is an extended version of `getopt' which parses "long option names" of the form `--hold-the-onions' and `--verbosity-level=extreme'. `Getopt--' behaves as `getopt' @@ -3898,17 +3993,17 @@ replaced them with a global variable: File: slib.info, Node: Command Line, Next: Parameter lists, Prev: Getopt, Up: Programs and Arguments -4.4.3 Command Line | ------------------- | +4.4.3 Command Line +------------------ `(require 'read-command)' - -- Function: read-command port | - -- Function: read-command | - `read-command' converts a "command line" into a list of strings suitable | - for parsing by `getopt'. The syntax of command lines supported | - resembles that of popular "shell"s. `read-command' updates PORT | - to point to the first character past the command delimiter. | + -- Function: read-command port + -- Function: read-command + `read-command' converts a "command line" into a list of strings suitable + for parsing by `getopt'. The syntax of command lines supported + resembles that of popular "shell"s. `read-command' updates PORT + to point to the first character past the command delimiter. If an end of file is encountered in the input before any characters are found that can begin an object or comment, then an @@ -3959,11 +4054,11 @@ File: slib.info, Node: Command Line, Next: Parameter lists, Prev: Getopt, Up treated as whitespace by `read-dommand-line' and backslashes before <newline>s in comments are also ignored. - -- Function: read-options-file filename | - `read-options-file' converts an "options file" into a list of strings | - suitable for parsing by `getopt'. The syntax of options files is | - the same as the syntax for command lines, except that <newline>s | - do not terminate reading (only <;> or end of file). | + -- Function: read-options-file filename + `read-options-file' converts an "options file" into a list of strings + suitable for parsing by `getopt'. The syntax of options files is + the same as the syntax for command lines, except that <newline>s + do not terminate reading (only <;> or end of file). If an end of file is encountered before any characters are found that can begin an object or comment, then an end of file object is @@ -3972,8 +4067,8 @@ File: slib.info, Node: Command Line, Next: Parameter lists, Prev: Getopt, Up File: slib.info, Node: Parameter lists, Next: Getopt Parameter lists, Prev: Command Line, Up: Programs and Arguments -4.4.4 Parameter lists | ---------------------- | +4.4.4 Parameter lists +--------------------- `(require 'parameters)' @@ -3991,25 +4086,25 @@ allows for more than one value per parameter-name. A PARAMETER-LIST is a list of PARAMETERs, each with a different PARAMETER-NAME. - -- Function: make-parameter-list parameter-names | + -- Function: make-parameter-list parameter-names Returns an empty parameter-list with slots for PARAMETER-NAMES. - -- Function: parameter-list-ref parameter-list parameter-name | + -- Function: parameter-list-ref parameter-list parameter-name PARAMETER-NAME must name a valid slot of PARAMETER-LIST. `parameter-list-ref' returns the value of parameter PARAMETER-NAME of PARAMETER-LIST. - -- Function: remove-parameter parameter-name parameter-list | + -- Function: remove-parameter parameter-name parameter-list Removes the parameter PARAMETER-NAME from PARAMETER-LIST. `remove-parameter' does not alter the argument PARAMETER-LIST. If there are more than one PARAMETER-NAME parameters, an error is signaled. - -- Procedure: adjoin-parameters! parameter-list parameter1 ... | + -- Procedure: adjoin-parameters! parameter-list parameter1 ... Returns PARAMETER-LIST with PARAMETER1 ... merged in. - -- Procedure: parameter-list-expand expanders parameter-list | + -- Procedure: parameter-list-expand expanders parameter-list EXPANDERS is a list of procedures whose order matches the order of the PARAMETER-NAMEs in the call to `make-parameter-list' which created PARAMETER-LIST. For each non-false element of EXPANDERS @@ -4019,7 +4114,7 @@ PARAMETER-NAME. This process is repeated until PARAMETER-LIST stops growing. The value returned from `parameter-list-expand' is unspecified. - -- Function: fill-empty-parameters defaulters parameter-list | + -- Function: fill-empty-parameters defaulters parameter-list DEFAULTERS is a list of procedures whose order matches the order of the PARAMETER-NAMEs in the call to `make-parameter-list' which created PARAMETER-LIST. `fill-empty-parameters' returns a new @@ -4027,7 +4122,7 @@ PARAMETER-NAME. returned by calling the corresponding DEFAULTER with PARAMETER-LIST as its argument. - -- Function: check-parameters checks parameter-list | + -- Function: check-parameters checks parameter-list CHECKS is a list of procedures whose order matches the order of the PARAMETER-NAMEs in the call to `make-parameter-list' which created PARAMETER-LIST. @@ -4054,7 +4149,7 @@ of `arities' can be: `nary1' One or more of parameters are acceptable. - -- Function: parameter-list->arglist positions arities parameter-list | + -- Function: parameter-list->arglist positions arities parameter-list Returns PARAMETER-LIST converted to an argument list. Parameters of ARITY type `single' and `boolean' are converted to the single value associated with them. The other ARITY types are converted @@ -4068,13 +4163,13 @@ of `arities' can be: File: slib.info, Node: Getopt Parameter lists, Next: Filenames, Prev: Parameter lists, Up: Programs and Arguments -4.4.5 Getopt Parameter lists | ----------------------------- | +4.4.5 Getopt Parameter lists +---------------------------- `(require 'getopt-parameters)' - -- Function: getopt->parameter-list optnames arities types aliases | - desc ... | + -- Function: getopt->parameter-list optnames arities types aliases + desc ... Returns *ARGV* converted to a parameter-list. OPTNAMES are the parameter-names. ARITIES and TYPES are lists of symbols corresponding to OPTNAMES. @@ -4100,7 +4195,7 @@ File: slib.info, Node: Getopt Parameter lists, Next: Filenames, Prev: Paramet In all cases, if unclaimed arguments remain after processing, a warning is signaled and #f is returned. - -- Function: getopt->arglist optnames positions arities types | + -- Function: getopt->arglist optnames positions arities types defaulters checks aliases desc ... Like `getopt->parameter-list', but converts *ARGV* to an argument-list as specified by OPTNAMES, POSITIONS, ARITIES, TYPES, @@ -4154,13 +4249,13 @@ the options (and argument strings DESC ...) are printed to File: slib.info, Node: Filenames, Next: Batch, Prev: Getopt Parameter lists, Up: Programs and Arguments -4.4.6 Filenames | ---------------- | +4.4.6 Filenames +--------------- `(require 'filename)' or `(require 'glob)' - -- Function: filename:match?? pattern | - -- Function: filename:match-ci?? pattern | + -- Function: filename:match?? pattern + -- Function: filename:match-ci?? pattern Returns a predicate which returns a non-false value if its string argument matches (the string) PATTERN, false otherwise. Filename matching is like "glob" expansion described the bash manpage, @@ -4184,8 +4279,8 @@ File: slib.info, Node: Filenames, Next: Batch, Prev: Getopt Parameter lists, `-' or `]' may be matched by including it as the first or last character in the set. - -- Function: filename:substitute?? pattern template | - -- Function: filename:substitute-ci?? pattern template | + -- Function: filename:substitute?? pattern template + -- Function: filename:substitute-ci?? pattern template Returns a function transforming a single string argument according to glob patterns PATTERN and TEMPLATE. PATTERN and TEMPLATE must have the same number of wildcard specifications, which need not be @@ -4215,7 +4310,7 @@ File: slib.info, Node: Filenames, Next: Batch, Prev: Getopt Parameter lists, "ABZ") => "ZA" - -- Function: replace-suffix str old new | + -- Function: replace-suffix str old new STR can be a string or a list of strings. Returns a new string (or strings) similar to `str' but with the suffix string OLD removed and the suffix string NEW appended. If the end of STR @@ -4224,15 +4319,15 @@ File: slib.info, Node: Filenames, Next: Batch, Prev: Getopt Parameter lists, (replace-suffix "/usr/local/lib/slib/batch.scm" ".scm" ".c") => "/usr/local/lib/slib/batch.c" - -- Function: call-with-tmpnam proc k | - -- Function: call-with-tmpnam proc | + -- Function: call-with-tmpnam proc k + -- Function: call-with-tmpnam proc Calls PROC with K arguments, strings returned by successive calls to `tmpnam'. If PROC returns, then any files named by the arguments to PROC are deleted automatically and the value(s) yielded by the PROC is(are) returned. K may be ommited, in which case it defaults to `1'. - -- Function: call-with-tmpnam proc suffix1 ... | + -- Function: call-with-tmpnam proc suffix1 ... Calls PROC with strings returned by successive calls to `tmpnam', each with the corresponding SUFFIX string appended. If PROC returns, then any files named by the arguments to PROC are deleted @@ -4242,8 +4337,8 @@ File: slib.info, Node: Filenames, Next: Batch, Prev: Getopt Parameter lists, File: slib.info, Node: Batch, Prev: Filenames, Up: Programs and Arguments -4.4.7 Batch | ------------ | +4.4.7 Batch +----------- `(require 'batch)' @@ -4274,18 +4369,18 @@ currently uses 2 of these: to store information linking the names of `operating-system's to `batch-dialect'es. - -- Function: batch:initialize! database | + -- Function: batch:initialize! database Defines `operating-system' and `batch-dialect' tables and adds the domain `operating-system' to the enhanced relational database DATABASE. - -- Variable: *operating-system* | + -- Variable: *operating-system* Is batch's best guess as to which operating-system it is running under. `*operating-system*' is set to `(software-type)' (*note Configuration::) unless `(software-type)' is `unix', in which case finer distinctions are made. - -- Function: batch:call-with-output-script parms file proc | + -- Function: batch:call-with-output-script parms file proc PROC should be a procedure of one argument. If FILE is an output-port, `batch:call-with-output-script' writes an appropriate header to FILE and then calls PROC with FILE as the only argument. @@ -4302,7 +4397,7 @@ added to PARMS or `(copy-tree PARMS)' by the code: (adjoin-parameters! PARMS (list 'batch-port PORT)) - -- Function: batch:command parms string1 string2 ... | + -- Function: batch:command parms string1 string2 ... Calls `batch:try-command' (below) with arguments, but signals an error if `batch:try-command' returns `#f'. @@ -4310,11 +4405,11 @@ These functions return a non-false value if the command was successfully translated into the batch dialect and `#f' if not. In the case of the `system' dialect, the value is non-false if the operation suceeded. - -- Function: batch:try-command parms string1 string2 ... | + -- Function: batch:try-command parms string1 string2 ... Writes a command to the `batch-port' in PARMS which executes the program named STRING1 with arguments STRING2 .... - -- Function: batch:try-chopped-command parms arg1 arg2 ... list | + -- Function: batch:try-chopped-command parms arg1 arg2 ... list breaks the last argument LIST into chunks small enough so that the command: @@ -4326,34 +4421,34 @@ translated into the batch dialect and `#f' if not. In the case of the command and returns non-false only if the commands all fit and `batch:try-command' of each command line returned non-false. - -- Function: batch:run-script parms string1 string2 ... | + -- Function: batch:run-script parms string1 string2 ... Writes a command to the `batch-port' in PARMS which executes the batch script named STRING1 with arguments STRING2 .... _Note:_ `batch:run-script' and `batch:try-command' are not the same for some operating systems (VMS). - -- Function: batch:comment parms line1 ... | + -- Function: batch:comment parms line1 ... Writes comment lines LINE1 ... to the `batch-port' in PARMS. - -- Function: batch:lines->file parms file line1 ... | + -- Function: batch:lines->file parms file line1 ... Writes commands to the `batch-port' in PARMS which create a file named FILE with contents LINE1 .... - -- Function: batch:delete-file parms file | + -- Function: batch:delete-file parms file Writes a command to the `batch-port' in PARMS which deletes the file named FILE. - -- Function: batch:rename-file parms old-name new-name | + -- Function: batch:rename-file parms old-name new-name Writes a command to the `batch-port' in PARMS which renames the file OLD-NAME to NEW-NAME. In addition, batch provides some small utilities very useful for writing scripts: - -- Function: truncate-up-to path char | - -- Function: truncate-up-to path string | - -- Function: truncate-up-to path charlist | + -- Function: truncate-up-to path char + -- Function: truncate-up-to path string + -- Function: truncate-up-to path charlist PATH can be a string or a list of strings. Returns PATH sans any prefixes ending with a character of the second argument. This can be used to derive a filename moved locally from elsewhere. @@ -4361,22 +4456,22 @@ scripts: (truncate-up-to "/usr/local/lib/slib/batch.scm" "/") => "batch.scm" - -- Function: string-join joiner string1 ... | + -- Function: string-join joiner string1 ... Returns a new string consisting of all the strings STRING1 ... in order appended together with the string JOINER between each adjacent pair. - -- Function: must-be-first list1 list2 | + -- Function: must-be-first list1 list2 Returns a new list consisting of the elements of LIST2 ordered so that if some elements of LIST1 are `equal?' to elements of LIST2, then those elements will appear first and in the order of LIST1. - -- Function: must-be-last list1 list2 | + -- Function: must-be-last list1 list2 Returns a new list consisting of the elements of LIST1 ordered so that if some elements of LIST2 are `equal?' to elements of LIST1, then those elements will appear last and in the order of LIST2. - -- Function: os->batch-dialect osname | + -- Function: os->batch-dialect osname Returns its best guess for the `batch-dialect' to be used for the operating-system named OSNAME. `os->batch-dialect' uses the tables added to DATABASE by `batch:initialize!'. @@ -4452,34 +4547,34 @@ When run, `my-batch' prints: File: slib.info, Node: HTML, Next: HTML Tables, Prev: Programs and Arguments, Up: Textual Conversion Packages -4.5 HTML | -======== | +4.5 HTML +======== `(require 'html-form)' - -- Function: html:atval txt | + -- Function: html:atval txt Returns a string with character substitutions appropriate to send TXT as an "attribute-value". - -- Function: html:plain txt | + -- Function: html:plain txt Returns a string with character substitutions appropriate to send TXT as an "plain-text". - -- Function: html:meta name content | + -- Function: html:meta name content Returns a tag of meta-information suitable for passing as the third argument to `html:head'. The tag produced is `<META NAME="NAME" CONTENT="CONTENT">'. The string or symbol NAME can be `author', `copyright', `keywords', `description', `date', `robots', .... - -- Function: html:http-equiv name content | + -- Function: html:http-equiv name content Returns a tag of HTTP information suitable for passing as the third argument to `html:head'. The tag produced is `<META HTTP-EQUIV="NAME" CONTENT="CONTENT">'. The string or symbol NAME can be `Expires', `PICS-Label', `Content-Type', `Refresh', .... - -- Function: html:meta-refresh delay uri | - -- Function: html:meta-refresh delay | + -- Function: html:meta-refresh delay uri + -- Function: html:meta-refresh delay Returns a tag suitable for passing as the third argument to `html:head'. If URI argument is supplied, then DELAY seconds after displaying the page with this tag, Netscape or IE browsers will @@ -4487,66 +4582,66 @@ File: slib.info, Node: HTML, Next: HTML Tables, Prev: Programs and Arguments, the page with this tag, Netscape or IE browsers will fetch and redisplay this page. - -- Function: html:head title backlink tags ... | - -- Function: html:head title backlink | - -- Function: html:head title | + -- Function: html:head title backlink tags ... + -- Function: html:head title backlink + -- Function: html:head title Returns header string for an HTML page named TITLE. If BACKLINK is a string, it is used verbatim between the `H1' tags; otherwise TITLE is used. If string arguments TAGS ... are supplied, then they are included verbatim within the <HEAD> section. - -- Function: html:body body ... | + -- Function: html:body body ... Returns HTML string to end a page. - -- Function: html:pre line1 line ... | - Returns the strings LINE1, LINES as "PRE"formmated plain text (rendered | - in fixed-width font). Newlines are inserted between LINE1, LINES. | - HTML tags (`<tag>') within LINES will be visible verbatim. | + -- Function: html:pre line1 line ... + Returns the strings LINE1, LINES as "PRE"formmated plain text (rendered + in fixed-width font). Newlines are inserted between LINE1, LINES. + HTML tags (`<tag>') within LINES will be visible verbatim. - -- Function: html:comment line1 line ... | + -- Function: html:comment line1 line ... Returns the strings LINE1 as HTML comments. -4.6 HTML Forms | -============== | +4.6 HTML Forms +============== - -- Function: html:form method action body ... | + -- Function: html:form method action body ... The symbol METHOD is either `get', `head', `post', `put', or `delete'. The strings BODY form the body of the form. `html:form' returns the HTML "form". - -- Function: html:hidden name value | + -- Function: html:hidden name value Returns HTML string which will cause NAME=VALUE in form. - -- Function: html:checkbox pname default | + -- Function: html:checkbox pname default Returns HTML string for check box. - -- Function: html:text pname default size ... | + -- Function: html:text pname default size ... Returns HTML string for one-line text box. - -- Function: html:text-area pname default-list | + -- Function: html:text-area pname default-list Returns HTML string for multi-line text box. - -- Function: html:select pname arity default-list foreign-values | + -- Function: html:select pname arity default-list foreign-values Returns HTML string for pull-down menu selector. - -- Function: html:buttons pname arity default-list foreign-values | + -- Function: html:buttons pname arity default-list foreign-values Returns HTML string for any-of selector. - -- Function: form:submit submit-label command | - -- Function: form:submit submit-label | + -- Function: form:submit submit-label command + -- Function: form:submit submit-label The string or symbol SUBMIT-LABEL appears on the button which submits the form. If the optional second argument COMMAND is given, then `*command*=COMMAND' and `*button*=SUBMIT-LABEL' are set in the query. Otherwise, `*command*=SUBMIT-LABEL' is set in the query. - -- Function: form:image submit-label image-src | + -- Function: form:image submit-label image-src The IMAGE-SRC appears on the button which submits the form. - -- Function: form:reset | + -- Function: form:reset Returns a string which generates a "reset" button. - -- Function: form:element pname arity default-list foreign-values | + -- Function: form:element pname arity default-list foreign-values Returns a string which generates an INPUT element for the field named PNAME. The element appears in the created form with its representation determined by its ARITY and domain. For domains @@ -4585,19 +4680,19 @@ File: slib.info, Node: HTML, Next: HTML Tables, Prev: Programs and Arguments, `nary1' text area - -- Function: form:delimited pname doc aliat arity default-list | + -- Function: form:delimited pname doc aliat arity default-list foreign-values Returns a HTML string for a form element embedded in a line of a delimited list. Apply map `form:delimited' to the list returned by `command->p-specs'. - -- Function: html:delimited-list row ... | + -- Function: html:delimited-list row ... Wraps its arguments with delimited-list (`DL' command. - -- Function: get-foreign-choices tab | + -- Function: get-foreign-choices tab Returns a list of the `visible-name' or first fields of table TAB. - -- Function: command->p-specs rdb command-table command | + -- Function: command->p-specs rdb command-table command The symbol COMMAND-TABLE names a command table in the RDB relational database. The symbol COMMAND names a key in COMMAND-TABLE. @@ -4632,25 +4727,25 @@ File: slib.info, Node: HTML, Next: HTML Tables, Prev: Programs and Arguments, File: slib.info, Node: HTML Tables, Next: HTTP and CGI, Prev: HTML, Up: Textual Conversion Packages -4.7 HTML Tables | -=============== | +4.7 HTML Tables +=============== `(require 'db->html)' - -- Function: html:table options row ... | + -- Function: html:table options row ... - -- Function: html:caption caption align | - -- Function: html:caption caption | + -- Function: html:caption caption align + -- Function: html:caption caption ALIGN can be `top' or `bottom'. - -- Function: html:heading columns | + -- Function: html:heading columns Outputs a heading row for the currently-started table. - -- Function: html:href-heading columns uris | + -- Function: html:href-heading columns uris Outputs a heading row with column-names COLUMNS linked to URIs URIS. - -- Function: html:linked-row-converter k foreigns | + -- Function: html:linked-row-converter k foreigns The positive integer K is the primary-key-limit (number of primary-keys) of the table. FOREIGNS is a list of the filenames of foreign-key field pages and #f for non foreign-key fields. @@ -4659,29 +4754,29 @@ File: slib.info, Node: HTML Tables, Next: HTTP and CGI, Prev: HTML, Up: Text its single argument. This returned procedure returns the html string for that table row. - -- Function: table-name->filename table-name | + -- Function: table-name->filename table-name Returns the symbol TABLE-NAME converted to a filename. - -- Function: table->linked-html caption db table-name match-key1 ... | - Returns HTML string for DB table TABLE-NAME chopped into 50-row | - HTML tables. Every foreign-key value is linked to the page (of | - the table) defining that key. | + -- Function: table->linked-html caption db table-name match-key1 ... + Returns HTML string for DB table TABLE-NAME chopped into 50-row + HTML tables. Every foreign-key value is linked to the page (of + the table) defining that key. The optional MATCH-KEY1 ... arguments restrict actions to a subset of the table. *Note match-key: Table Operations. - -- Function: table->linked-page db table-name index-filename arg ... | + -- Function: table->linked-page db table-name index-filename arg ... Returns a complete HTML page. The string INDEX-FILENAME names the page which refers to this one. The optional ARGS ... arguments restrict actions to a subset of the table. *Note match-key: Table Operations. - -- Function: catalog->html db caption arg ... | + -- Function: catalog->html db caption arg ... Returns HTML string for the catalog table of DB. -4.7.1 HTML editing tables | -------------------------- | +4.7.1 HTML editing tables +------------------------- A client can modify one row of an editable table at a time. For any change submitted, these routines check if that row has been modified @@ -4714,11 +4809,11 @@ The behavior of edited rows is: After any change to the table, a `sync-database' of the database is performed. - -- Function: command:modify-table table-name null-keys update delete | + -- Function: command:modify-table table-name null-keys update delete retrieve - -- Function: command:modify-table table-name null-keys update delete | - -- Function: command:modify-table table-name null-keys update | - -- Function: command:modify-table table-name null-keys | + -- Function: command:modify-table table-name null-keys update delete + -- Function: command:modify-table table-name null-keys update + -- Function: command:modify-table table-name null-keys Returns procedure (of DB) which returns procedure to modify row of TABLE-NAME. NULL-KEYS is the list of "null" keys indicating the row is to be deleted when any matches its corresponding primary @@ -4726,7 +4821,7 @@ performed. the `row:update', `row:delete', and `row:retrieve' of TABLE-NAME in DB. - -- Function: command:make-editable-table rdb table-name arg ... | + -- Function: command:make-editable-table rdb table-name arg ... Given TABLE-NAME in RDB, creates parameter and `*command*' tables for editing one row of TABLE-NAME at a time. `command:make-editable-table' returns a procedure taking a row @@ -4744,7 +4839,7 @@ performed. `+' have arity `nary1'. - -- Function: html:editable-row-converter k names edit-point | + -- Function: html:editable-row-converter k names edit-point edit-converter The positive integer K is the primary-key-limit (number of primary-keys) of the table. NAMES is a list of the field-names. @@ -4762,10 +4857,10 @@ performed. `row->anchor'). The page so referenced typically allows the user to edit fields of that row. -4.7.2 HTML databases | --------------------- | +4.7.2 HTML databases +-------------------- - -- Function: db->html-files db dir index-filename caption | + -- Function: db->html-files db dir index-filename caption DB must be a relational database. DIR must be #f or a non-empty string naming an existing sub-directory of the current directory. @@ -4775,8 +4870,8 @@ performed. tables (captioned CAPTION) is written to a file named INDEX-FILENAME. - -- Function: db->html-directory db dir index-filename | - -- Function: db->html-directory db dir | + -- Function: db->html-directory db dir index-filename + -- Function: db->html-directory db dir DB must be a relational database. DIR must be a non-empty string naming an existing sub-directory of the current directory or one to be created. The optional string INDEX-FILENAME names the @@ -4786,8 +4881,8 @@ performed. calls `(db->html-files DB DIR INDEX-FILENAME DIR)'. The `file:' URI of INDEX-FILENAME is returned. - -- Function: db->netscape db dir index-filename | - -- Function: db->netscape db dir | + -- Function: db->netscape db dir index-filename + -- Function: db->netscape db dir `db->netscape' is just like `db->html-directory', but calls `browse-url' with the uri for the top page after the pages are created. @@ -4795,39 +4890,39 @@ performed. File: slib.info, Node: HTTP and CGI, Next: Parsing HTML, Prev: HTML Tables, Up: Textual Conversion Packages -4.8 HTTP and CGI | -================ | +4.8 HTTP and CGI +================ `(require 'http)' or `(require 'cgi)' - -- Function: http:header alist | + -- Function: http:header alist Returns a string containing lines for each element of ALIST; the `car' of which is followed by `: ', then the `cdr'. - -- Function: http:content alist body ... | + -- Function: http:content alist body ... Returns the concatenation of strings BODY with the `(http:header ALIST)' and the `Content-Length' prepended. - -- Variable: *http:byline* | + -- Variable: *http:byline* String appearing at the bottom of error pages. - -- Function: http:error-page status-code reason-phrase html-string ... | + -- Function: http:error-page status-code reason-phrase html-string ... STATUS-CODE and REASON-PHRASE should be an integer and string as specified in `RFC 2068'. The returned page (string) will show the STATUS-CODE and REASON-PHRASE and any additional HTML-STRINGS ...; with *HTTP:BYLINE* or SLIB's default at the bottom. - -- Function: http:forwarding-page title dly uri html-string ... | - The string or symbol TITLE is the page title. DLY is a | + -- Function: http:forwarding-page title dly uri html-string ... + The string or symbol TITLE is the page title. DLY is a non-negative integer. The HTML-STRINGS ... are typically used to explain to the user why this page is being forwarded. `http:forwarding-page' returns an HTML string for a page which - automatically forwards to URI after DLY seconds. The returned | + automatically forwards to URI after DLY seconds. The returned page (string) contains any HTML-STRINGS ... followed by a manual link to URI, in case the browser does not forward automatically. - -- Function: http:serve-query serve-proc input-port output-port | + -- Function: http:serve-query serve-proc input-port output-port reads the "URI" and "query-string" from INPUT-PORT. If the query is a valid `"POST"' or `"GET"' query, then `http:serve-query' calls SERVE-PROC with three arguments, the REQUEST-LINE, QUERY-STRING, @@ -4860,7 +4955,7 @@ File: slib.info, Node: HTTP and CGI, Next: Parsing HTML, Prev: HTML Tables, (close-port port))) (lambda () (close-port socket)))) - -- Function: cgi:serve-query serve-proc | + -- Function: cgi:serve-query serve-proc reads the "URI" and "query-string" from `(current-input-port)'. If the query is a valid `"POST"' or `"GET"' query, then `cgi:serve-query' calls SERVE-PROC with three arguments, the @@ -4877,8 +4972,8 @@ File: slib.info, Node: HTTP and CGI, Next: Parsing HTML, Prev: HTML Tables, Otherwise, `cgi:serve-query' replies (to `(current-input-port)') with appropriate HTML describing the problem. - -- Function: make-query-alist-command-server rdb command-table | - -- Function: make-query-alist-command-server rdb command-table #t | + -- Function: make-query-alist-command-server rdb command-table + -- Function: make-query-alist-command-server rdb command-table #t Returns a procedure of one argument. When that procedure is called with a QUERY-ALIST (as returned by `uri:decode-query', the value of the `*command*' association will be the command invoked in @@ -4894,12 +4989,12 @@ File: slib.info, Node: HTTP and CGI, Next: Parsing HTML, Prev: HTML Tables, File: slib.info, Node: Parsing HTML, Next: URI, Prev: HTTP and CGI, Up: Textual Conversion Packages -4.9 Parsing HTML | -================ | +4.9 Parsing HTML +================ `(require 'html-for-each)' - -- Function: html-for-each file word-proc markup-proc white-proc | + -- Function: html-for-each file word-proc markup-proc white-proc newline-proc FILE is an input port or a string naming an existing file containing HTML text. WORD-PROC is a procedure of one argument or @@ -4934,8 +5029,8 @@ File: slib.info, Node: Parsing HTML, Next: URI, Prev: HTTP and CGI, Up: Text `html-for-each' returns an unspecified value. - -- Function: html:read-title file limit | - -- Function: html:read-title file | + -- Function: html:read-title file limit + -- Function: html:read-title file FILE is an input port or a string naming an existing file containing HTML text. If supplied, LIMIT must be an integer. LIMIT defaults to 1000. @@ -4948,7 +5043,7 @@ File: slib.info, Node: Parsing HTML, Next: URI, Prev: HTTP and CGI, Up: Text from FILE is not `#\<', or if the end of title is not found within the first (approximately) LIMIT words. - -- Function: htm-fields htm | + -- Function: htm-fields htm HTM is a hypertext markup string. If HTM is a (hypertext) comment, then `htm-fields' returns #f. @@ -4961,27 +5056,27 @@ File: slib.info, Node: Parsing HTML, Next: URI, Prev: HTTP and CGI, Up: Text File: slib.info, Node: URI, Next: Printing Scheme, Prev: Parsing HTML, Up: Textual Conversion Packages -4.10 URI | -======== | +4.10 URI +======== `(require 'uri)' Implements "Uniform Resource Identifiers" (URI) as described in RFC 2396. - -- Function: make-uri | - -- Function: make-uri fragment | - -- Function: make-uri query fragment | - -- Function: make-uri path query fragment | - -- Function: make-uri authority path query fragment | - -- Function: make-uri scheme authority path query fragment | + -- Function: make-uri + -- Function: make-uri fragment + -- Function: make-uri query fragment + -- Function: make-uri path query fragment + -- Function: make-uri authority path query fragment + -- Function: make-uri scheme authority path query fragment Returns a Uniform Resource Identifier string from component arguments. - -- Function: uri:make-path path | + -- Function: uri:make-path path Returns a URI string combining the components of list PATH. - -- Function: html:anchor name | + -- Function: html:anchor name Returns a string which defines this location in the (HTML) file as NAME. The hypertext `<A HREF="#NAME">' will link to this point. @@ -4989,23 +5084,23 @@ Implements "Uniform Resource Identifiers" (URI) as described in RFC => "<A NAME=\"(section%207)\"></A>" - -- Function: html:link uri highlighted | + -- Function: html:link uri highlighted Returns a string which links the HIGHLIGHTED text to URI. (html:link (make-uri "(section 7)") "section 7") => "<A HREF=\"#(section%207)\">section 7</A>" - -- Function: html:base uri | - Returns a string specifying the "base" URI of a document, for inclusion | - in the HEAD of the document (*note head: HTML.). | + -- Function: html:base uri + Returns a string specifying the "base" URI of a document, for inclusion + in the HEAD of the document (*note head: HTML.). - -- Function: html:isindex prompt | + -- Function: html:isindex prompt Returns a string specifying the search PROMPT of a document, for inclusion in the HEAD of the document (*note head: HTML.). - -- Function: uri->tree uri-reference base-tree | - -- Function: uri->tree uri-reference | + -- Function: uri->tree uri-reference base-tree + -- Function: uri->tree uri-reference Returns a list of 5 elements corresponding to the parts (SCHEME AUTHORITY PATH QUERY FRAGMENT) of string URI-REFERENCE. Elements corresponding to absent parts are #f. @@ -5024,27 +5119,27 @@ Implements "Uniform Resource Identifiers" (URI) as described in RFC => (http "www.ics.uci.edu" ("" "pub" "ietf" "uri" "") #f "Related") - -- Function: uri:split-fields txt chr | + -- Function: uri:split-fields txt chr Returns a list of TXT split at each occurrence of CHR. CHR does not appear in the returned list of strings. - -- Function: uri:decode-query query-string | + -- Function: uri:decode-query query-string Converts a "URI" encoded QUERY-STRING to a query-alist. `uric:' prefixes indicate procedures dealing with URI-components. - -- Function: uric:encode uri-component allows | + -- Function: uric:encode uri-component allows Returns a copy of the string URI-COMPONENT in which all "unsafe" - octets (as defined in RFC 2396) have been `%' "escaped". `uric:decode' | - decodes strings encoded by `uric:encode'. | + octets (as defined in RFC 2396) have been `%' "escaped". `uric:decode' + decodes strings encoded by `uric:encode'. - -- Function: uric:decode uri-component | + -- Function: uric:decode uri-component Returns a copy of the string URI-COMPONENT in which each `%' escaped characters in URI-COMPONENT is replaced with the character it encodes. This routine is useful for showing URI contents on error pages. - -- Function: uri:path->keys path-list ptypes | + -- Function: uri:path->keys path-list ptypes PATH-LIST is a path-list as returned by `uri:split-fields'. `uri:path->keys' returns a list of items returned by `uri:decode-path', coerced to types PTYPES. @@ -5052,29 +5147,29 @@ Implements "Uniform Resource Identifiers" (URI) as described in RFC File-system Locators and Predicates ----------------------------------- - -- Function: path->uri path | + -- Function: path->uri path Returns a URI-string for PATH on the local host. - -- Function: absolute-uri? str | + -- Function: absolute-uri? str Returns #t if STR is an absolute-URI as indicated by a syntactically valid (per RFC 2396) "scheme"; otherwise returns #f. - -- Function: absolute-path? file-name | + -- Function: absolute-path? file-name Returns #t if FILE-NAME is a fully specified pathname (does not depend on the current working directory); otherwise returns #f. - -- Function: null-directory? str | + -- Function: null-directory? str Returns #t if changing directory to STR would leave the current directory unchanged; otherwise returns #f. - -- Function: glob-pattern? str | + -- Function: glob-pattern? str Returns #t if the string STR contains characters used for specifying glob patterns, namely `*', `?', or `['. Before RFC 2396, the "File Transfer Protocol" (FTP) served a similar purpose. - -- Function: parse-ftp-address uri | + -- Function: parse-ftp-address uri Returns a list of the decoded FTP URI; or #f if indecipherable. FTP "Uniform Resource Locator", "ange-ftp", and "getit" formats are handled. The returned list has four elements which are @@ -5091,8 +5186,8 @@ purpose. File: slib.info, Node: Printing Scheme, Next: Time and Date, Prev: URI, Up: Textual Conversion Packages -4.11 Printing Scheme | -==================== | +4.11 Printing Scheme +==================== * Menu: @@ -5103,8 +5198,8 @@ File: slib.info, Node: Printing Scheme, Next: Time and Date, Prev: URI, Up: File: slib.info, Node: Generic-Write, Next: Object-To-String, Prev: Printing Scheme, Up: Printing Scheme -4.11.1 Generic-Write | --------------------- | +4.11.1 Generic-Write +-------------------- `(require 'generic-write)' @@ -5114,7 +5209,7 @@ prints it. The interface to the procedure is sufficiently general to easily implement other useful formatting procedures such as pretty printing, output to a string and truncated output. - -- Procedure: generic-write obj display? width output | + -- Procedure: generic-write obj display? width output OBJ Scheme data value to transform. @@ -5146,28 +5241,28 @@ printing, output to a string and truncated output. File: slib.info, Node: Object-To-String, Next: Pretty-Print, Prev: Generic-Write, Up: Printing Scheme -4.11.2 Object-To-String | ------------------------ | +4.11.2 Object-To-String +----------------------- `(require 'object->string)' - -- Function: object->string obj | + -- Function: object->string obj Returns the textual representation of OBJ as a string. - -- Function: object->limited-string obj limit | + -- Function: object->limited-string obj limit Returns the textual representation of OBJ as a string of length at most LIMIT. File: slib.info, Node: Pretty-Print, Prev: Object-To-String, Up: Printing Scheme -4.11.3 Pretty-Print | -------------------- | +4.11.3 Pretty-Print +------------------- `(require 'pretty-print)' - -- Procedure: pretty-print obj | - -- Procedure: pretty-print obj port | + -- Procedure: pretty-print obj + -- Procedure: pretty-print obj port `pretty-print's OBJ on PORT. If PORT is not specified, `current-output-port' is used. @@ -5180,8 +5275,8 @@ File: slib.info, Node: Pretty-Print, Prev: Object-To-String, Up: Printing Sch -| (16 17 18 19 20) -| (21 22 23 24 25)) - -- Procedure: pretty-print->string obj | - -- Procedure: pretty-print->string obj width | + -- Procedure: pretty-print->string obj + -- Procedure: pretty-print->string obj width Returns the string of OBJ `pretty-print'ed in WIDTH columns. If WIDTH is not specified, `(output-port-width)' is used. @@ -5220,14 +5315,14 @@ File: slib.info, Node: Pretty-Print, Prev: Object-To-String, Up: Printing Sch `(require 'pprint-file)' - -- Procedure: pprint-file infile | - -- Procedure: pprint-file infile outfile | + -- Procedure: pprint-file infile + -- Procedure: pprint-file infile outfile Pretty-prints all the code in INFILE. If OUTFILE is specified, the output goes to OUTFILE, otherwise it goes to `(current-output-port)'. - -- Function: pprint-filter-file infile proc outfile | - -- Function: pprint-filter-file infile proc | + -- Function: pprint-filter-file infile proc outfile + -- Function: pprint-filter-file infile proc INFILE is a port or a string naming an existing file. Scheme source code expressions and definitions are read from the port (or file) and PROC is applied to them sequentially. @@ -5252,15 +5347,15 @@ thus can reduce loading time. The following will write into File: slib.info, Node: Time and Date, Next: NCBI-DNA, Prev: Printing Scheme, Up: Textual Conversion Packages -4.12 Time and Date | -================== | +4.12 Time and Date +================== * Menu: * Time Zone:: * Posix Time:: 'posix-time * Common-Lisp Time:: 'common-lisp-time -* Time Infrastructure:: | +* Time Infrastructure:: If `(provided? 'current-time)': @@ -5268,29 +5363,29 @@ The procedures `current-time', `difftime', and `offset-time' deal with a "calendar time" datatype which may or may not be disjoint from other Scheme datatypes. - -- Function: current-time | + -- Function: current-time Returns the time since 00:00:00 GMT, January 1, 1970, measured in seconds. Note that the reference time is different from the reference time for `get-universal-time' in *Note Common-Lisp Time::. - -- Function: difftime caltime1 caltime0 | + -- Function: difftime caltime1 caltime0 Returns the difference (number of seconds) between twe calendar times: CALTIME1 - CALTIME0. CALTIME0 may also be a number. - -- Function: offset-time caltime offset | + -- Function: offset-time caltime offset Returns the calendar time of CALTIME offset by OFFSET number of seconds `(+ caltime offset)'. File: slib.info, Node: Time Zone, Next: Posix Time, Prev: Time and Date, Up: Time and Date -4.12.1 Time Zone | ----------------- | +4.12.1 Time Zone +---------------- (require 'time-zone) - -- Data Format: TZ-string | + -- Data Format: TZ-string POSIX standards specify several formats for encoding time-zone rules. @@ -5344,17 +5439,17 @@ File: slib.info, Node: Time Zone, Next: Posix Time, Prev: Time and Date, Up: Day 0 is a Sunday. - -- Data Type: time-zone | + -- Data Type: time-zone is a datatype encoding how many hours from Greenwich Mean Time the local time is, and the "Daylight Savings Time" rules for changing it. - -- Function: time-zone TZ-string | + -- Function: time-zone TZ-string Creates and returns a time-zone object specified by the string TZ-STRING. If `time-zone' cannot interpret TZ-STRING, `#f' is returned. - -- Function: tz:params caltime tz | + -- Function: tz:params caltime tz TZ is a time-zone object. `tz:params' returns a list of three items: 0. An integer. 0 if standard time is in effect for timezone TZ @@ -5370,7 +5465,7 @@ File: slib.info, Node: Time Zone, Next: Posix Time, Prev: Time and Date, Up: made of any timezone at any calendar time. - -- Function: tz:std-offset tz | + -- Function: tz:std-offset tz TZ is a time-zone object. `tz:std-offset' returns the number of seconds west of the Prime Meridian timezone TZ is. @@ -5378,13 +5473,13 @@ File: slib.info, Node: Time Zone, Next: Posix Time, Prev: Time and Date, Up: The rest of these procedures and variables are provided for POSIX compatability. Because of shared state they are not thread-safe. - -- Function: tzset | + -- Function: tzset Returns the default time-zone. - -- Function: tzset tz | + -- Function: tzset tz Sets (and returns) the default time-zone to TZ. - -- Function: tzset TZ-string | + -- Function: tzset TZ-string Sets (and returns) the default time-zone to that specified by TZ-STRING. @@ -5392,19 +5487,19 @@ compatability. Because of shared state they are not thread-safe. This function is automatically called by the time conversion procedures which depend on the time zone (*note Time and Date::). - -- Variable: *timezone* | + -- Variable: *timezone* Contains the difference, in seconds, between Greenwich Mean Time and local standard time (for example, in the U.S. Eastern time zone (EST), timezone is 5*60*60). `*timezone*' is initialized by `tzset'. - -- Variable: daylight? | + -- Variable: daylight? is `#t' if the default timezone has rules for "Daylight Savings Time". _Note:_ DAYLIGHT? does not tell you when Daylight Savings Time is in effect, just that the default zone sometimes has Daylight Savings Time. - -- Variable: tzname | + -- Variable: tzname is a vector of strings. Index 0 has the abbreviation for the standard timezone; If DAYLIGHT?, then index 1 has the abbreviation for the Daylight Savings timezone. @@ -5412,16 +5507,16 @@ compatability. Because of shared state they are not thread-safe. File: slib.info, Node: Posix Time, Next: Common-Lisp Time, Prev: Time Zone, Up: Time and Date -4.12.2 Posix Time | ------------------ | +4.12.2 Posix Time +----------------- (require 'posix-time) - | - -- Data Type: Calendar-Time | + + -- Data Type: Calendar-Time is a datatype encapsulating time. - -- Data Type: Coordinated Universal Time | + -- Data Type: Coordinated Universal Time (abbreviated "UTC") is a vector of integers representing time: 0. seconds (0 - 61) @@ -5444,13 +5539,13 @@ File: slib.info, Node: Posix Time, Next: Common-Lisp Time, Prev: Time Zone, 8. 1 for daylight savings, 0 for regular time - -- Function: gmtime caltime | + -- Function: gmtime caltime Converts the calendar time CALTIME to UTC and returns it. - -- Function: localtime caltime tz | + -- Function: localtime caltime tz Returns CALTIME converted to UTC relative to timezone TZ. - -- Function: localtime caltime | + -- Function: localtime caltime converts the calendar time CALTIME to a vector of integers expressed relative to the user's time zone. `localtime' sets the variable *TIMEZONE* with the difference between Coordinated @@ -5458,44 +5553,44 @@ File: slib.info, Node: Posix Time, Next: Common-Lisp Time, Prev: Time Zone, tzset: Time Zone.). - -- Function: gmktime univtime | + -- Function: gmktime univtime Converts a vector of integers in GMT Coordinated Universal Time (UTC) format to a calendar time. - -- Function: mktime univtime | + -- Function: mktime univtime Converts a vector of integers in local Coordinated Universal Time (UTC) format to a calendar time. - -- Function: mktime univtime tz | + -- Function: mktime univtime tz Converts a vector of integers in Coordinated Universal Time (UTC) format (relative to time-zone TZ) to calendar time. - -- Function: asctime univtime | + -- Function: asctime univtime Converts the vector of integers CALTIME in Coordinated Universal Time (UTC) format into a string of the form `"Wed Jun 30 21:49:08 1993"'. - -- Function: gtime caltime | - -- Function: ctime caltime | - -- Function: ctime caltime tz | + -- Function: gtime caltime + -- Function: ctime caltime + -- Function: ctime caltime tz Equivalent to `(asctime (gmtime CALTIME))', `(asctime (localtime CALTIME))', and `(asctime (localtime CALTIME TZ))', respectively. File: slib.info, Node: Common-Lisp Time, Next: Time Infrastructure, Prev: Posix Time, Up: Time and Date - | -4.12.3 Common-Lisp Time | ------------------------ | - -- Function: get-decoded-time | +4.12.3 Common-Lisp Time +----------------------- + + -- Function: get-decoded-time Equivalent to `(decode-universal-time (get-universal-time))'. - -- Function: get-universal-time | + -- Function: get-universal-time Returns the current time as "Universal Time", number of seconds since 00:00:00 Jan 1, 1900 GMT. Note that the reference time is different from `current-time'. - -- Function: decode-universal-time univtime | + -- Function: decode-universal-time univtime Converts UNIVTIME to "Decoded Time" format. Nine values are returned: 0. seconds (0 - 61) @@ -5520,8 +5615,8 @@ File: slib.info, Node: Common-Lisp Time, Next: Time Infrastructure, Prev: Pos Notice that the values returned by `decode-universal-time' do not match the arguments to `encode-universal-time'. - -- Function: encode-universal-time second minute hour date month year | - -- Function: encode-universal-time second minute hour date month year | + -- Function: encode-universal-time second minute hour date month year + -- Function: encode-universal-time second minute hour date month year time-zone Converts the arguments in Decoded Time format to Universal Time format. If TIME-ZONE is not specified, the returned time is @@ -5533,47 +5628,47 @@ File: slib.info, Node: Common-Lisp Time, Next: Time Infrastructure, Prev: Pos File: slib.info, Node: Time Infrastructure, Prev: Common-Lisp Time, Up: Time and Date - | -4.12.4 Time Infrastructure | --------------------------- | - | -`(require 'time-core)' | - | - -- Function: time:gmtime tm | - -- Function: time:invert decoder target | - -- Function: time:split t tm_isdst tm_gmtoff tm_zone | - | - `(require 'tzfile)' | - | - -- Function: tzfile:read path | - | + +4.12.4 Time Infrastructure +-------------------------- + +`(require 'time-core)' + + -- Function: time:gmtime tm + -- Function: time:invert decoder target + -- Function: time:split t tm_isdst tm_gmtoff tm_zone + + `(require 'tzfile)' + + -- Function: tzfile:read path + File: slib.info, Node: NCBI-DNA, Next: Schmooz, Prev: Time and Date, Up: Textual Conversion Packages - | -4.13 NCBI-DNA | -============= | - -- Function: ncbi:read-dna-sequence port | +4.13 NCBI-DNA +============= + + -- Function: ncbi:read-dna-sequence port Reads the NCBI-format DNA sequence following the word `ORIGIN' from PORT. - -- Function: ncbi:read-file file | + -- Function: ncbi:read-file file Reads the NCBI-format DNA sequence following the word `ORIGIN' from FILE. - -- Function: mrna<-cdna str | + -- Function: mrna<-cdna str Replaces `T' with `U' in STR - -- Function: codons<-cdna cdna | + -- Function: codons<-cdna cdna Returns a list of three-letter symbol codons comprising the protein sequence encoded by CDNA starting with its first occurence of `atg'. - -- Function: protein<-cdna cdna | + -- Function: protein<-cdna cdna Returns a list of three-letter symbols for the protein sequence encoded by CDNA starting with its first occurence of `atg'. - -- Function: p<-cdna cdna | + -- Function: p<-cdna cdna Returns a string of one-letter amino acid codes for the protein sequence encoded by CDNA starting with its first occurence of `atg'. @@ -5581,18 +5676,18 @@ File: slib.info, Node: NCBI-DNA, Next: Schmooz, Prev: Time and Date, Up: Tex These cDNA count routines provide a means to check the nucleotide sequence with the `BASE COUNT' line preceding the sequence from NCBI. - -- Function: cdna:base-count cdna | + -- Function: cdna:base-count cdna Returns a list of counts of `a', `c', `g', and `t' occurrencing in CDNA. - -- Function: cdna:report-base-count cdna | + -- Function: cdna:report-base-count cdna Prints the counts of `a', `c', `g', and `t' occurrencing in CDNA. File: slib.info, Node: Schmooz, Prev: NCBI-DNA, Up: Textual Conversion Packages -4.14 Schmooz | -============ | +4.14 Schmooz +============ "Schmooz" is a simple, lightweight markup language for interspersing Texinfo documentation with Scheme source code. Schmooz does not create @@ -5603,16 +5698,16 @@ imported into the documentation using the Texinfo command `@include'. process files. Files containing schmooz documentation should not contain `(require 'schmooz)'. - -- Procedure: schmooz filename.scm ... | + -- Procedure: schmooz filename.scm ... FILENAME.scm should be a string ending with `.scm' naming an existing file containing Scheme source code. `schmooz' extracts top-level comments containing schmooz commands from FILENAME.scm and writes the converted Texinfo source to a file named FILENAME.txi. - -- Procedure: schmooz filename.texi ... | - -- Procedure: schmooz filename.tex ... | - -- Procedure: schmooz filename.txi ... | + -- Procedure: schmooz filename.texi ... + -- Procedure: schmooz filename.tex ... + -- Procedure: schmooz filename.txi ... FILENAME should be a string naming an existing file containing Texinfo source code. For every occurrence of the string `@include FILENAME.txi' within that file, `schmooz' calls itself with the @@ -5690,8 +5785,8 @@ directives in schmooz comments. File: slib.info, Node: Mathematical Packages, Next: Database Packages, Prev: Textual Conversion Packages, Up: Top -5 Mathematical Packages | -*********************** | +5 Mathematical Packages +*********************** * Menu: @@ -5706,14 +5801,15 @@ File: slib.info, Node: Mathematical Packages, Next: Database Packages, Prev: * Color:: * Root Finding:: 'root * Minimizing:: 'minimize +* The Limit:: 'limit | * Commutative Rings:: 'commutative-ring * Matrix Algebra:: 'determinant File: slib.info, Node: Bit-Twiddling, Next: Modular Arithmetic, Prev: Mathematical Packages, Up: Mathematical Packages -5.1 Bit-Twiddling | -================= | +5.1 Bit-Twiddling +================= `(require 'logical)' @@ -5723,39 +5819,39 @@ The bit-twiddling functions are made available through the use of the behave as though operating on integers in two's-complement representation. -5.1.1 Bitwise Operations | ------------------------- | +5.1.1 Bitwise Operations +------------------------ - -- Function: logand n1 ... | - -- Function: bitwise-and n1 ... | - Returns the integer which is the bit-wise AND of the integer | + -- Function: logand n1 ... + -- Function: bitwise-and n1 ... + Returns the integer which is the bit-wise AND of the integer arguments. Example: (number->string (logand #b1100 #b1010) 2) => "1000" - -- Function: logior n1 ... | - -- Function: bitwise-ior n1 ... | - Returns the integer which is the bit-wise OR of the integer | + -- Function: logior n1 ... + -- Function: bitwise-ior n1 ... + Returns the integer which is the bit-wise OR of the integer arguments. Example: (number->string (logior #b1100 #b1010) 2) => "1110" - -- Function: logxor n1 ... | - -- Function: bitwise-xor n1 ... | - Returns the integer which is the bit-wise XOR of the integer | + -- Function: logxor n1 ... + -- Function: bitwise-xor n1 ... + Returns the integer which is the bit-wise XOR of the integer arguments. Example: (number->string (logxor #b1100 #b1010) 2) => "110" - -- Function: lognot n | - -- Function: bitwise-not n | - Returns the integer which is the one's-complement of the integer | + -- Function: lognot n + -- Function: bitwise-not n + Returns the integer which is the one's-complement of the integer argument. Example: @@ -5764,25 +5860,25 @@ representation. (number->string (lognot #b0) 2) => "-1" - -- Function: bitwise-if mask n0 n1 | - -- Function: bitwise-merge mask n0 n1 | + -- Function: bitwise-if mask n0 n1 + -- Function: bitwise-merge mask n0 n1 Returns an integer composed of some bits from integer N0 and some from integer N1. A bit of the result is taken from N0 if the corresponding bit of integer MASK is 1 and from N1 if that bit of MASK is 0. - -- Function: logtest j k | - -- Function: any-bits-set? j k | + -- Function: logtest j k + -- Function: any-bits-set? j k (logtest j k) == (not (zero? (logand j k))) (logtest #b0100 #b1011) => #f (logtest #b0100 #b0111) => #t -5.1.2 Integer Properties | ------------------------- | - | - -- Function: logcount n | - -- Function: bit-count n | +5.1.2 Integer Properties +------------------------ + + -- Function: logcount n + -- Function: bit-count n Returns the number of bits in integer N. If integer is positive, the 1-bits in its binary representation are counted. If negative, the 0-bits in its two's-complement binary representation are @@ -5796,55 +5892,55 @@ representation. (logcount -2) => 1 - -- Function: integer-length n | - Returns the number of bits neccessary to represent N. | + -- Function: integer-length n + Returns the number of bits neccessary to represent N. - Example: | - (integer-length #b10101010) | - => 8 | - (integer-length 0) | - => 0 | - (integer-length #b1111) | - => 4 | - | - -- Function: log2-binary-factors n | - -- Function: first-set-bit n | - Returns the number of factors of two of integer N. This value is | - also the bit-index of the least-significant `1' bit in N. | - | - (require 'printf) | - (do ((idx 0 (+ 1 idx))) | - ((> idx 16)) | - (printf "%s(%3d) ==> %-5d %s(%2d) ==> %-5d\n" | - 'log2-binary-factors | - (- idx) (log2-binary-factors (- idx)) | - 'log2-binary-factors | - idx (log2-binary-factors idx))) | - -| | - log2-binary-factors( 0) ==> -1 log2-binary-factors( 0) ==> -1 | - log2-binary-factors( -1) ==> 0 log2-binary-factors( 1) ==> 0 | - log2-binary-factors( -2) ==> 1 log2-binary-factors( 2) ==> 1 | - log2-binary-factors( -3) ==> 0 log2-binary-factors( 3) ==> 0 | - log2-binary-factors( -4) ==> 2 log2-binary-factors( 4) ==> 2 | - log2-binary-factors( -5) ==> 0 log2-binary-factors( 5) ==> 0 | - log2-binary-factors( -6) ==> 1 log2-binary-factors( 6) ==> 1 | - log2-binary-factors( -7) ==> 0 log2-binary-factors( 7) ==> 0 | - log2-binary-factors( -8) ==> 3 log2-binary-factors( 8) ==> 3 | - log2-binary-factors( -9) ==> 0 log2-binary-factors( 9) ==> 0 | - log2-binary-factors(-10) ==> 1 log2-binary-factors(10) ==> 1 | - log2-binary-factors(-11) ==> 0 log2-binary-factors(11) ==> 0 | - log2-binary-factors(-12) ==> 2 log2-binary-factors(12) ==> 2 | - log2-binary-factors(-13) ==> 0 log2-binary-factors(13) ==> 0 | - log2-binary-factors(-14) ==> 1 log2-binary-factors(14) ==> 1 | - log2-binary-factors(-15) ==> 0 log2-binary-factors(15) ==> 0 | - log2-binary-factors(-16) ==> 4 log2-binary-factors(16) ==> 4 | - | -5.1.3 Bit Within Word | ---------------------- | - | - -- Function: logbit? index n | - -- Function: bit-set? index n | - (logbit? index n) == (logtest (expt 2 index) n) | + Example: + (integer-length #b10101010) + => 8 + (integer-length 0) + => 0 + (integer-length #b1111) + => 4 + + -- Function: log2-binary-factors n + -- Function: first-set-bit n + Returns the number of factors of two of integer N. This value is + also the bit-index of the least-significant `1' bit in N. + + (require 'printf) + (do ((idx 0 (+ 1 idx))) + ((> idx 16)) + (printf "%s(%3d) ==> %-5d %s(%2d) ==> %-5d\n" + 'log2-binary-factors + (- idx) (log2-binary-factors (- idx)) + 'log2-binary-factors + idx (log2-binary-factors idx))) + -| + log2-binary-factors( 0) ==> -1 log2-binary-factors( 0) ==> -1 + log2-binary-factors( -1) ==> 0 log2-binary-factors( 1) ==> 0 + log2-binary-factors( -2) ==> 1 log2-binary-factors( 2) ==> 1 + log2-binary-factors( -3) ==> 0 log2-binary-factors( 3) ==> 0 + log2-binary-factors( -4) ==> 2 log2-binary-factors( 4) ==> 2 + log2-binary-factors( -5) ==> 0 log2-binary-factors( 5) ==> 0 + log2-binary-factors( -6) ==> 1 log2-binary-factors( 6) ==> 1 + log2-binary-factors( -7) ==> 0 log2-binary-factors( 7) ==> 0 + log2-binary-factors( -8) ==> 3 log2-binary-factors( 8) ==> 3 + log2-binary-factors( -9) ==> 0 log2-binary-factors( 9) ==> 0 + log2-binary-factors(-10) ==> 1 log2-binary-factors(10) ==> 1 + log2-binary-factors(-11) ==> 0 log2-binary-factors(11) ==> 0 + log2-binary-factors(-12) ==> 2 log2-binary-factors(12) ==> 2 + log2-binary-factors(-13) ==> 0 log2-binary-factors(13) ==> 0 + log2-binary-factors(-14) ==> 1 log2-binary-factors(14) ==> 1 + log2-binary-factors(-15) ==> 0 log2-binary-factors(15) ==> 0 + log2-binary-factors(-16) ==> 4 log2-binary-factors(16) ==> 4 + +5.1.3 Bit Within Word +--------------------- + + -- Function: logbit? index n + -- Function: bit-set? index n + (logbit? index n) == (logtest (expt 2 index) n) (logbit? 0 #b1101) => #t (logbit? 1 #b1101) => #f @@ -5852,7 +5948,7 @@ representation. (logbit? 3 #b1101) => #t (logbit? 4 #b1101) => #f - -- Function: copy-bit index from bit | + -- Function: copy-bit index from bit Returns an integer the same as FROM except in the INDEXth bit, which is 1 if BIT is `#t' and 0 if BIT is `#f'. @@ -5861,10 +5957,10 @@ representation. (number->string (copy-bit 2 0 #t) 2) => "100" (number->string (copy-bit 2 #b1111 #f) 2) => "1011" -5.1.4 Field of Bits | -------------------- | +5.1.4 Field of Bits +------------------- - -- Function: bit-field n start end | + -- Function: bit-field n start end Returns the integer composed of the START (inclusive) through END (exclusive) bits of N. The STARTth bit becomes the 0-th bit in the result. @@ -5875,22 +5971,22 @@ representation. (number->string (bit-field #b1101101010 4 9) 2) => "10110" - -- Function: copy-bit-field to from start end | + -- Function: copy-bit-field to from start end Returns an integer the same as TO except possibly in the START (inclusive) through END (exclusive) bits, which are the same as those of FROM. The 0-th bit of FROM becomes the STARTth bit of the result. Example: - (number->string (copy-bit-field #b1101101010 0 0 4) 2) | + (number->string (copy-bit-field #b1101101010 0 0 4) 2) => "1101100000" - (number->string (copy-bit-field #b1101101010 -1 0 4) 2) | + (number->string (copy-bit-field #b1101101010 -1 0 4) 2) => "1101101111" - (number->string (copy-bit-field #b110100100010000 -1 5 9) 2) | - => "110100111110000" | + (number->string (copy-bit-field #b110100100010000 -1 5 9) 2) + => "110100111110000" - -- Function: ash n count | - -- Function: arithmetic-shift n count | + -- Function: ash n count + -- Function: arithmetic-shift n count Returns an integer equivalent to `(inexact->exact (floor (* N (expt 2 COUNT))))'. @@ -5900,36 +5996,36 @@ representation. (number->string (ash #b1010 -1) 2) => "101" - -- Function: rotate-bit-field n count start end | - Returns N with the bit-field from START to END cyclically permuted | - by COUNT bits towards high-order. | + -- Function: rotate-bit-field n count start end + Returns N with the bit-field from START to END cyclically permuted + by COUNT bits towards high-order. Example: - (number->string (rotate-bit-field #b0100 3 0 4) 2) | + (number->string (rotate-bit-field #b0100 3 0 4) 2) => "10" - (number->string (rotate-bit-field #b0100 -1 0 4) 2) | + (number->string (rotate-bit-field #b0100 -1 0 4) 2) => "10" - (number->string (rotate-bit-field #b110100100010000 -1 5 9) 2) | - => "110100010010000" | - (number->string (rotate-bit-field #b110100100010000 1 5 9) 2) | - => "110100000110000" | + (number->string (rotate-bit-field #b110100100010000 -1 5 9) 2) + => "110100010010000" + (number->string (rotate-bit-field #b110100100010000 1 5 9) 2) + => "110100000110000" - -- Function: reverse-bit-field n start end | - Returns N with the order of bits START to END reversed. | + -- Function: reverse-bit-field n start end + Returns N with the order of bits START to END reversed. - (number->string (reverse-bit-field #xa7 0 8) 16) | + (number->string (reverse-bit-field #xa7 0 8) 16) => "e5" -5.1.5 Bits as Booleans | ----------------------- | - | - -- Function: integer->list k len | - -- Function: integer->list k | +5.1.5 Bits as Booleans +---------------------- + + -- Function: integer->list k len + -- Function: integer->list k `integer->list' returns a list of LEN booleans corresponding to each bit of the given integer. #t is coded for each 1; #f for 0. The LEN argument defaults to `(integer-length K)'. - -- Function: list->integer list | + -- Function: list->integer list `list->integer' returns an integer formed from the booleans in the list LIST, which must be a list of booleans. A 1 bit is coded for each #t; a 0 bit for #f. @@ -5937,19 +6033,19 @@ representation. `integer->list' and `list->integer' are inverses so far as `equal?' is concerned. - -- Function: booleans->integer bool1 ... | + -- Function: booleans->integer bool1 ... Returns the integer coded by the BOOL1 ... arguments. - | + File: slib.info, Node: Modular Arithmetic, Next: Prime Numbers, Prev: Bit-Twiddling, Up: Mathematical Packages -5.2 Modular Arithmetic | -====================== | +5.2 Modular Arithmetic +====================== `(require 'modular)' - -- Function: mod x1 x2 | - -- Function: rem x1 x2 | + -- Function: mod x1 x2 + -- Function: rem x1 x2 These procedures implement the Common-Lisp functions of the same names. The real number X2 must be non-zero. `mod' returns `(- X1 (* X2 (floor (/ X1 X2))))'. `rem' returns `(- X1 (* X2 (truncate @@ -5967,18 +6063,18 @@ File: slib.info, Node: Modular Arithmetic, Next: Prime Numbers, Prev: Bit-Twi (mod (* 5/2 pi) (* 2 pi)) => 1.5707963267948965 (rem (* -5/2 pi) (* 2 pi)) => -1.5707963267948965 - -- Function: extended-euclid n1 n2 | + -- Function: extended-euclid n1 n2 Returns a list of 3 integers `(d x y)' such that d = gcd(N1, N2) = N1 * x + N2 * y. - -- Function: symmetric:modulus n | + -- Function: symmetric:modulus n Returns `(quotient (+ -1 n) -2)' for positive odd integer N. - -- Function: modulus->integer modulus | + -- Function: modulus->integer modulus Returns the non-negative integer characteristic of the ring formed when MODULUS is used with `modular:' procedures. - -- Function: modular:normalize modulus n | + -- Function: modular:normalize modulus n Returns the integer `(modulo N (modulus->integer MODULUS))' in the representation specified by MODULUS. @@ -5994,46 +6090,46 @@ For all of these functions, if the first argument (MODULUS) is: `negative?' The arguments and result are treated as members of the integers - modulo `(+ 1 (* -2 MODULUS))', but with "symmetric" representation; | - i.e. `(<= (- MODULUS) N MODULUS)'. | + modulo `(+ 1 (* -2 MODULUS))', but with "symmetric" representation; + i.e. `(<= (- MODULUS) N MODULUS)'. If all the arguments are fixnums the computation will use only fixnums. - -- Function: modular:invertable? modulus k | + -- Function: modular:invertable? modulus k Returns `#t' if there exists an integer n such that K * n == 1 mod MODULUS, and `#f' otherwise. - -- Function: modular:invert modulus n2 | + -- Function: modular:invert modulus n2 Returns an integer n such that 1 = (n * N2) mod MODULUS. If N2 has no inverse mod MODULUS an error is signaled. - -- Function: modular:negate modulus n2 | + -- Function: modular:negate modulus n2 Returns (-N2) mod MODULUS. - -- Function: modular:+ modulus n2 n3 | + -- Function: modular:+ modulus n2 n3 Returns (N2 + N3) mod MODULUS. - -- Function: modular:- modulus n2 n3 | + -- Function: modular:- modulus n2 n3 Returns (N2 - N3) mod MODULUS. - -- Function: modular:* modulus n2 n3 | + -- Function: modular:* modulus n2 n3 Returns (N2 * N3) mod MODULUS. The Scheme code for `modular:*' with negative MODULUS is not completed for fixnum-only implementations. - -- Function: modular:expt modulus n2 n3 | + -- Function: modular:expt modulus n2 n3 Returns (N2 ^ N3) mod MODULUS. File: slib.info, Node: Prime Numbers, Next: Random Numbers, Prev: Modular Arithmetic, Up: Mathematical Packages -5.3 Prime Numbers | -================= | +5.3 Prime Numbers +================= `(require 'factor)' - -- Variable: prime:prngs | + -- Variable: prime:prngs PRIME:PRNGS is the random-state (*note Random Numbers::) used by these procedures. If you call these procedures from more than one thread (or from interrupt), `random' may complain about reentrant @@ -6044,28 +6140,28 @@ the Solovay-Strassen primality test. See * Robert Solovay and Volker Strassen, `A Fast Monte-Carlo Test for Primality', SIAM Journal on Computing, 1977, pp 84-85. - -- Function: jacobi-symbol p q | + -- Function: jacobi-symbol p q Returns the value (+1, -1, or 0) of the Jacobi-Symbol of exact non-negative integer P and exact positive odd integer Q. - -- Variable: prime:trials | + -- Variable: prime:trials PRIME:TRIALS the maxinum number of iterations of Solovay-Strassen that will be done to test a number for primality. - -- Function: prime? n | + -- Function: prime? n Returns `#f' if N is composite; `#t' if N is prime. There is a slight chance `(expt 2 (- prime:trials))' that a composite will return `#t'. - -- Function: primes< start count | + -- Function: primes< start count Returns a list of the first COUNT prime numbers less than START. If there are fewer than COUNT prime numbers less than START, then the returned list will have fewer than START elements. - -- Function: primes> start count | + -- Function: primes> start count Returns a list of the first COUNT prime numbers greater than START. - -- Function: factor k | + -- Function: factor k Returns a list of the prime factors of K. The order of the factors is unspecified. In order to obtain a sorted list do `(sort! (factor K) <)'. @@ -6073,14 +6169,14 @@ the Solovay-Strassen primality test. See File: slib.info, Node: Random Numbers, Next: Fast Fourier Transform, Prev: Prime Numbers, Up: Mathematical Packages -5.4 Random Numbers | -================== | +5.4 Random Numbers +================== A pseudo-random number generator is only as good as the tests it passes. George Marsaglia of Florida State University developed a battery of -tests named "DIEHARD" (`http://stat.fsu.edu/~geo/diehard.html'). | +tests named "DIEHARD" (`http://stat.fsu.edu/~geo/diehard.html'). `diehard.c' has a bug which the patch -`http://swiss.csail.mit.edu/ftpdir/users/jaffer/diehard.c.pat' corrects. | +`http://swiss.csail.mit.edu/ftpdir/users/jaffer/diehard.c.pat' corrects. SLIB's PRNG generates 8 bits at a time. With the degenerate seed `0', the numbers generated pass DIEHARD; but when bits are combined @@ -6095,13 +6191,13 @@ from sequential bytes, tests fail. With the seed File: slib.info, Node: Exact Random Numbers, Next: Inexact Random Numbers, Prev: Random Numbers, Up: Random Numbers -5.4.1 Exact Random Numbers | --------------------------- | +5.4.1 Exact Random Numbers +-------------------------- `(require 'random)' - -- Function: random n state | - -- Function: random n | + -- Function: random n state + -- Function: random n N must be an exact positive integer. `random' returns an exact integer between zero (inclusive) and N (exclusive). The values returned by `random' are uniformly distributed from 0 to N. @@ -6112,7 +6208,7 @@ File: slib.info, Node: Exact Random Numbers, Next: Inexact Random Numbers, Pr to maintain the state of the pseudo-random-number generator and is altered as a side effect of calls to `random'. - -- Variable: *random-state* | + -- Variable: *random-state* Holds a data structure that encodes the internal state of the random-number generator that `random' uses by default. The nature of this data structure is implementation-dependent. It may be @@ -6120,13 +6216,13 @@ File: slib.info, Node: Exact Random Numbers, Next: Inexact Random Numbers, Pr function correctly as a random-number state object in another implementation. - -- Function: copy-random-state state | + -- Function: copy-random-state state Returns a new copy of argument STATE. - -- Function: copy-random-state | + -- Function: copy-random-state Returns a new copy of `*random-state*'. - -- Function: seed->random-state seed | + -- Function: seed->random-state seed Returns a new object of type suitable for use as the value of the variable `*random-state*' or as a second argument to `random'. The number or string SEED is used to initialize the state. If @@ -6135,8 +6231,8 @@ File: slib.info, Node: Exact Random Numbers, Next: Inexact Random Numbers, Pr Calling `seed->random-state' with unequal arguments will nearly always return unequal states. - -- Function: make-random-state | - -- Function: make-random-state obj | + -- Function: make-random-state + -- Function: make-random-state obj Returns a new object of type suitable for use as the value of the variable `*random-state*' or as a second argument to `random'. If the optional argument OBJ is given, it should be a printable @@ -6147,43 +6243,43 @@ File: slib.info, Node: Exact Random Numbers, Next: Inexact Random Numbers, Pr File: slib.info, Node: Inexact Random Numbers, Prev: Exact Random Numbers, Up: Random Numbers -5.4.2 Inexact Random Numbers | ----------------------------- | +5.4.2 Inexact Random Numbers +---------------------------- `(require 'random-inexact)' - -- Function: random:uniform | - -- Function: random:uniform state | + -- Function: random:uniform + -- Function: random:uniform state Returns an uniformly distributed inexact real random number in the range between 0 and 1. - -- Function: random:exp | - -- Function: random:exp state | + -- Function: random:exp + -- Function: random:exp state Returns an inexact real in an exponential distribution with mean 1. For an exponential distribution with mean U use `(* U (random:exp))'. - -- Function: random:normal | - -- Function: random:normal state | + -- Function: random:normal + -- Function: random:normal state Returns an inexact real in a normal distribution with mean 0 and standard deviation 1. For a normal distribution with mean M and standard deviation D use `(+ M (* D (random:normal)))'. - -- Procedure: random:normal-vector! vect | - -- Procedure: random:normal-vector! vect state | + -- Procedure: random:normal-vector! vect + -- Procedure: random:normal-vector! vect state Fills VECT with inexact real random numbers which are independent and standard normally distributed (i.e., with mean 0 and variance 1). - -- Procedure: random:hollow-sphere! vect | - -- Procedure: random:hollow-sphere! vect state | + -- Procedure: random:hollow-sphere! vect + -- Procedure: random:hollow-sphere! vect state Fills VECT with inexact real random numbers the sum of whose squares is equal to 1.0. Thinking of VECT as coordinates in space of dimension n = `(vector-length VECT)', the coordinates are uniformly distributed over the surface of the unit n-shere. - -- Procedure: random:solid-sphere! vect | - -- Procedure: random:solid-sphere! vect state | + -- Procedure: random:solid-sphere! vect + -- Procedure: random:solid-sphere! vect state Fills VECT with inexact real random numbers the sum of whose squares is less than 1.0. Thinking of VECT as coordinates in space of dimension N = `(vector-length VECT)', the coordinates are @@ -6193,17 +6289,17 @@ File: slib.info, Node: Inexact Random Numbers, Prev: Exact Random Numbers, Up File: slib.info, Node: Fast Fourier Transform, Next: Cyclic Checksum, Prev: Random Numbers, Up: Mathematical Packages -5.5 Fast Fourier Transform | -========================== | +5.5 Fast Fourier Transform +========================== `(require 'fft)' - -- Function: fft array | + -- Function: fft array ARRAY is an array of `(expt 2 n)' numbers. `fft' returns an array of complex numbers comprising the "Discrete Fourier Transform" of ARRAY. - -- Function: fft-1 array | + -- Function: fft-1 array `fft-1' returns an array of complex numbers comprising the inverse Discrete Fourier Transform of ARRAY. @@ -6222,12 +6318,12 @@ File: slib.info, Node: Fast Fourier Transform, Next: Cyclic Checksum, Prev: R File: slib.info, Node: Cyclic Checksum, Next: Graphing, Prev: Fast Fourier Transform, Up: Mathematical Packages -5.6 Cyclic Checksum | -=================== | +5.6 Cyclic Checksum +=================== -`(require 'crc)' Cyclic Redundancy Checks using Galois field GF(2) | -polynomial arithmetic are used for error detection in many data | -transmission and storage applications. | +`(require 'crc)' Cyclic Redundancy Checks using Galois field GF(2) +polynomial arithmetic are used for error detection in many data +transmission and storage applications. The generator polynomials for various CRC protocols are availble from many sources. But the polynomial is just one of many parameters which @@ -6244,26 +6340,26 @@ existing systems: non-inverted) to the data stream. -The performance of a particular CRC polynomial over packets of given | -sizes varies widely. In terms of the probability of undetected errors, | -some uses of extant CRC polynomials are suboptimal by several orders of | -magnitude. | - | -If you are considering CRC for a new application, consult the following | -article to find the optimum CRC polynomial for your range of data | -lengths: | - | - * Philip Koopman and Tridib Chakravarty, | - "Cyclic Redundancy Code (CRC) Polynomial Selection For Embedded | - Networks", | - The International Conference on Dependable Systems and Networks, | - DSN-2004. | - | -`http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf' | - | +The performance of a particular CRC polynomial over packets of given +sizes varies widely. In terms of the probability of undetected errors, +some uses of extant CRC polynomials are suboptimal by several orders of +magnitude. + +If you are considering CRC for a new application, consult the following +article to find the optimum CRC polynomial for your range of data +lengths: + + * Philip Koopman and Tridib Chakravarty, + "Cyclic Redundancy Code (CRC) Polynomial Selection For Embedded + Networks", + The International Conference on Dependable Systems and Networks, + DSN-2004. + +`http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf' + There is even some controversy over the polynomials themselves. - -- Constant: crc-32-polynomial | + -- Constant: crc-32-polynomial For CRC-32, http://www2.sis.pitt.edu/~jkabara/tele-2100/lect08.html gives x^32+x^26+x^23+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+1. @@ -6279,7 +6375,7 @@ There is even some controversy over the polynomials themselves. SLIB `crc-32-polynomial' uses the latter definition. - -- Constant: crc-ccitt-polynomial | + -- Constant: crc-ccitt-polynomial http://www.math.grin.edu/~rebelsky/Courses/CS364/2000S/Outlines/outline.12.html, http://duchon.umuc.edu/Web_Pages/duchon/99_f_cm435/ShiftRegister.htm, http://www.cs.ncl.ac.uk/people/harry.whitfield/home.formal/CRCs.html, @@ -6287,7 +6383,7 @@ There is even some controversy over the polynomials themselves. http://www.gpfn.sk.ca/~rhg/csc8550s02/crc.html give CRC-CCITT: x^16+x^12+x^5+1. - -- Constant: crc-16-polynomial | + -- Constant: crc-16-polynomial http://www.math.grin.edu/~rebelsky/Courses/CS364/2000S/Outlines/outline.12.html, http://duchon.umuc.edu/Web_Pages/duchon/99_f_cm435/ShiftRegister.htm, http://www.cs.ncl.ac.uk/people/harry.whitfield/home.formal/CRCs.html, @@ -6295,7 +6391,7 @@ There is even some controversy over the polynomials themselves. http://www.usb.org/developers/data/crcdes.pdf give CRC-16: x^16+x^15+x^2+1. - -- Constant: crc-12-polynomial | + -- Constant: crc-12-polynomial http://www.math.grin.edu/~rebelsky/Courses/CS364/2000S/Outlines/outline.12.html, http://www.cs.ncl.ac.uk/people/harry.whitfield/home.formal/CRCs.html, http://www.it.iitb.ac.in/it605/lectures/link/node4.html, and @@ -6313,10 +6409,10 @@ There is even some controversy over the polynomials themselves. These differ in bit 1 and calculations using them return different values. With citations near evenly split, it is hard to know - which is correct. Thanks to Philip Koopman for breaking the tie | - in favor of the latter (#xC07). | + which is correct. Thanks to Philip Koopman for breaking the tie + in favor of the latter (#xC07). - -- Constant: crc-10-polynomial | + -- Constant: crc-10-polynomial http://www.math.grin.edu/~rebelsky/Courses/CS364/2000S/Outlines/outline.12.html gives CRC-10: x^10+x^9+x^5+x^4+1; but http://cell-relay.indiana.edu/cell-relay/publications/software/CRC/crc10.html, @@ -6327,29 +6423,29 @@ There is even some controversy over the polynomials themselves. http://www.nobugconsulting.ro/crc.php give CRC-10: x^10+x^9+x^5+x^4+x+1. - -- Constant: crc-08-polynomial | + -- Constant: crc-08-polynomial http://www.math.grin.edu/~rebelsky/Courses/CS364/2000S/Outlines/outline.12.html, http://www.cs.ncl.ac.uk/people/harry.whitfield/home.formal/CRCs.html, http://www.it.iitb.ac.in/it605/lectures/link/node4.html, and http://www.nobugconsulting.ro/crc.php give CRC-8: x^8+x^2+x^1+1 - -- Constant: atm-hec-polynomial | + -- Constant: atm-hec-polynomial http://cell-relay.indiana.edu/cell-relay/publications/software/CRC/32bitCRC.tutorial.html and http://www.gpfn.sk.ca/~rhg/csc8550s02/crc.html give ATM HEC: x^8+x^2+x+1. - -- Constant: dowcrc-polynomial | + -- Constant: dowcrc-polynomial http://www.cs.ncl.ac.uk/people/harry.whitfield/home.formal/CRCs.html gives DOWCRC: x^8+x^5+x^4+1. - -- Constant: usb-token-polynomial | + -- Constant: usb-token-polynomial http://www.usb.org/developers/data/crcdes.pdf and http://www.nobugconsulting.ro/crc.php give USB-token: x^5+x^2+1. Each of these polynomial constants is a string of `1's and `0's, the exponent of each power of X in descending order. - -- Function: crc:make-table poly | + -- Function: crc:make-table poly POLY must be string of `1's and `0's beginning with `1' and having length greater than 8. `crc:make-table' returns a vector of 256 integers, such that: @@ -6367,14 +6463,14 @@ exponent of each power of X in descending order. `crc:make-table' returns #f. - -- Function: cksum file | + -- Function: cksum file Computes the P1003.2/D11.2 (POSIX.2) 32-bit checksum of FILE. (require 'crc) (cksum (in-vicinity (library-vicinity) "ratize.scm")) => 157103930 - -- Function: cksum port | + -- Function: cksum port Computes the checksum of the bytes read from PORT until the end-of-file. @@ -6385,10 +6481,10 @@ checksum of the bytes in STR, can be defined as follows: (require 'string-port) (define (cksum-string str) (call-with-input-string str cksum)) - -- Function: crc16 file | + -- Function: crc16 file Computes the USB data-packet (16-bit) CRC of FILE. - -- Function: crc16 port | + -- Function: crc16 port Computes the USB data-packet (16-bit) CRC of the bytes read from PORT until the end-of-file. @@ -6396,10 +6492,10 @@ checksum of the bytes in STR, can be defined as follows: in http://www.usb.org/developers/data/crcdes.pdf. - -- Function: crc5 file | + -- Function: crc5 file Computes the USB token (5-bit) CRC of FILE. - -- Function: crc5 port | + -- Function: crc5 port Computes the USB token (5-bit) CRC of the bytes read from PORT until the end-of-file. @@ -6410,8 +6506,8 @@ checksum of the bytes in STR, can be defined as follows: File: slib.info, Node: Graphing, Next: Solid Modeling, Prev: Cyclic Checksum, Up: Mathematical Packages -5.7 Graphing | -============ | +5.7 Graphing +============ * Menu: @@ -6421,12 +6517,12 @@ File: slib.info, Node: Graphing, Next: Solid Modeling, Prev: Cyclic Checksum, File: slib.info, Node: Character Plotting, Next: PostScript Graphing, Prev: Graphing, Up: Graphing -5.7.1 Character Plotting | ------------------------- | +5.7.1 Character Plotting +------------------------ `(require 'charplot)' - -- Variable: charplot:dimensions | + -- Variable: charplot:dimensions A list of the maximum height (number of lines) and maximum width (number of columns) for the graph, its scales, and labels. @@ -6434,7 +6530,7 @@ File: slib.info, Node: Character Plotting, Next: PostScript Graphing, Prev: G `output-port-height' and `output-port-width' of `current-output-port'. - -- Procedure: plot coords x-label y-label | + -- Procedure: plot coords x-label y-label COORDS is a list or vector of coordinates, lists of x and y coordinates. X-LABEL and Y-LABEL are strings with which to label the x and y axes. @@ -6471,8 +6567,8 @@ File: slib.info, Node: Character Plotting, Next: PostScript Graphing, Prev: G |:_____._____:_____._____:_____._____:____| x 2 4 6 - -- Procedure: plot func x1 x2 | - -- Procedure: plot func x1 x2 npts | + -- Procedure: plot func x1 x2 + -- Procedure: plot func x1 x2 npts Plots the function of one argument FUNC over the range X1 to X2. If the optional integer argument NPTS is supplied, it specifies the number of points to evaluate FUNC at. @@ -6500,7 +6596,7 @@ File: slib.info, Node: Character Plotting, Next: PostScript Graphing, Prev: G |_:_____._____:_____._____:_____._____:___| 0 2 4 6 - -- Procedure: histograph data label | + -- Procedure: histograph data label Creates and displays a histogram of the numerical values contained in vector or list DATA @@ -6534,20 +6630,20 @@ File: slib.info, Node: Character Plotting, Next: PostScript Graphing, Prev: G File: slib.info, Node: PostScript Graphing, Prev: Character Plotting, Up: Graphing -5.7.2 PostScript Graphing | -------------------------- | +5.7.2 PostScript Graphing +------------------------- `(require 'eps-graph)' This is a graphing package creating encapsulated-PostScript files. Its motivations and design choice are described in -`http://swiss.csail.mit.edu/~jaffer/Docupage/grapheps' | +`http://swiss.csail.mit.edu/~jaffer/Docupage/grapheps' A dataset to be plotted is taken from a 2-dimensional array. Corresponding coordinates are in rows. Coordinates from any pair of columns can be plotted. - -- Function: create-postscript-graph filename.eps size elt1 ... | + -- Function: create-postscript-graph filename.eps size elt1 ... FILENAME.EPS should be a string naming an output file to be created. SIZE should be an exact integer, a list of two exact integers, or #f. ELT1, ... are values returned by graphing @@ -6567,7 +6663,7 @@ These graphing procedures should be called as arguments to significant; PostScript graphics state is affected serially from the first ELT argument to the last. - -- Function: whole-page | + -- Function: whole-page Pushes a rectangle for the whole encapsulated page onto the PostScript stack. This pushed rectangle is an implicit argument to `partition-page' or `setup-plot'. @@ -6585,26 +6681,26 @@ first ELT argument to the last. File: slib.info, Node: Column Ranges, Next: Drawing the Graph, Prev: PostScript Graphing, Up: PostScript Graphing -5.7.2.1 Column Ranges | -..................... | +5.7.2.1 Column Ranges +..................... -A "range" is a list of two numbers, the minimum and the maximum. Ranges | -can be given explicity or computed in PostScript by `column-range'. | +A "range" is a list of two numbers, the minimum and the maximum. Ranges +can be given explicity or computed in PostScript by `column-range'. - -- Function: column-range array k | + -- Function: column-range array k Returns the range of values in 2-dimensional ARRAY column K. - -- Function: pad-range range p | + -- Function: pad-range range p Expands RANGE by P/100 on each end. - -- Function: snap-range range | + -- Function: snap-range range Expands RANGE to round number of ticks. - -- Function: combine-ranges range1 range2 ... | + -- Function: combine-ranges range1 range2 ... Returns the minimal range covering all RANGE1, RANGE2, ... - -- Function: setup-plot x-range y-range pagerect | - -- Function: setup-plot x-range y-range | + -- Function: setup-plot x-range y-range pagerect + -- Function: setup-plot x-range y-range X-RANGE and Y-RANGE should each be a list of two numbers or the value returned by `pad-range', `snap-range', or `combine-range'. PAGERECT is the rectangle bounding the graph to be drawn; if @@ -6626,10 +6722,10 @@ can be given explicity or computed in PostScript by `column-range'. | File: slib.info, Node: Drawing the Graph, Next: Graphics Context, Prev: Column Ranges, Up: PostScript Graphing -5.7.2.2 Drawing the Graph | -......................... | +5.7.2.2 Drawing the Graph +......................... - -- Function: plot-column array x-column y-column proc3s | + -- Function: plot-column array x-column y-column proc3s Plots points with x coordinate in X-COLUMN of ARRAY and y coordinate Y-COLUMN of ARRAY. The symbol PROC3S specifies the type of glyph or drawing style for presenting these coordinates. @@ -6684,21 +6780,21 @@ The glyphs and drawing styles available are: File: slib.info, Node: Graphics Context, Next: Rectangles, Prev: Drawing the Graph, Up: PostScript Graphing -5.7.2.3 Graphics Context | -........................ | +5.7.2.3 Graphics Context +........................ - -- Function: in-graphic-context arg ... | + -- Function: in-graphic-context arg ... Saves the current graphics state, executes ARGS, then restores to saved graphics state. - -- Function: set-color color | + -- Function: set-color color COLOR should be a string naming a Resene color, a saturate color, or a number between 0 and 100. `set-color' sets the PostScript color to the color of the given string, or a grey value between black (0) and white (100). - -- Function: set-font name fontheight | + -- Function: set-font name fontheight NAME should be a (case-sensitive) string naming a PostScript font. FONTHEIGHT should be a positive real number. @@ -6714,21 +6810,21 @@ Symbol Line parameters do no affect fonts; they do effect glyphs. - -- Function: set-linewidth w | + -- Function: set-linewidth w The default linewidth is 1. Setting it to 0 makes the lines drawn as skinny as possible. Linewidth must be much smaller than glyphsize for readable glyphs. - -- Function: set-linedash j k | + -- Function: set-linedash j k Lines are drawn J-on K-off. - -- Function: set-linedash j | + -- Function: set-linedash j Lines are drawn J-on J-off. - -- Function: set-linedash | + -- Function: set-linedash Turns off dashing. - -- Function: set-glyphsize w | + -- Function: set-glyphsize w Sets the (PostScript) variable glyphsize to W. The default glyphsize is 6. @@ -6737,39 +6833,39 @@ The effects of `clip-to-rect' are also part of the graphic context. File: slib.info, Node: Rectangles, Next: Legending, Prev: Graphics Context, Up: PostScript Graphing -5.7.2.4 Rectangles | -.................. | +5.7.2.4 Rectangles +.................. A "rectangle" is a list of 4 numbers; the first two elements are the x and y coordinates of lower left corner of the rectangle. The other two elements are the width and height of the rectangle. - -- Function: whole-page | + -- Function: whole-page Pushes a rectangle for the whole encapsulated page onto the PostScript stack. This pushed rectangle is an implicit argument to `partition-page' or `setup-plot'. - -- Function: partition-page xparts yparts | + -- Function: partition-page xparts yparts Pops the rectangle currently on top of the stack and pushes XPARTS * YPARTS sub-rectangles onto the stack in decreasing y and increasing x order. If you are drawing just one graph, then you don't need `partition-page'. - -- Variable: plotrect | + -- Variable: plotrect The rectangle where data points should be plotted. PLOTRECT is set by `setup-plot'. - -- Variable: graphrect | + -- Variable: graphrect The PAGERECT argument of the most recent call to `setup-plot'. Includes plotrect, legends, etc. - -- Function: fill-rect rect | + -- Function: fill-rect rect fills RECT with the current color. - -- Function: outline-rect rect | + -- Function: outline-rect rect Draws the perimiter of RECT in the current color. - -- Function: clip-to-rect rect | + -- Function: clip-to-rect rect Modifies the current graphics-state so that nothing will be drawn outside of the rectangle RECT. Use `in-graphic-context' to limit the extent of `clip-to-rect'. @@ -6777,35 +6873,35 @@ elements are the width and height of the rectangle. File: slib.info, Node: Legending, Next: Legacy Plotting, Prev: Rectangles, Up: PostScript Graphing -5.7.2.5 Legending | -................. | +5.7.2.5 Legending +................. - -- Function: title-top title subtitle | - -- Function: title-top title | + -- Function: title-top title subtitle + -- Function: title-top title Puts a TITLE line and an optional SUBTITLE line above the `graphrect'. - -- Function: title-bottom title subtitle | - -- Function: title-bottom title | + -- Function: title-bottom title subtitle + -- Function: title-bottom title Puts a TITLE line and an optional SUBTITLE line below the `graphrect'. - -- Variable: topedge | - -- Variable: bottomedge | + -- Variable: topedge + -- Variable: bottomedge These edge coordinates of `graphrect' are suitable for passing as the first argument to `rule-horizontal'. - -- Variable: leftedge | - -- Variable: rightedge | + -- Variable: leftedge + -- Variable: rightedge These edge coordinates of `graphrect' are suitable for passing as the first argument to `rule-vertical'. - -- Function: set-margin-templates left right | - The margin-templates are strings whose displayed width is used to | - reserve space for the left and right side numerical legends. The | - default values are "-.0123456789". | - | - -- Function: rule-vertical x-coord text tick-width | + -- Function: set-margin-templates left right + The margin-templates are strings whose displayed width is used to + reserve space for the left and right side numerical legends. The + default values are "-.0123456789". + + -- Function: rule-vertical x-coord text tick-width Draws a vertical ruler with X coordinate X-COORD and labeled with string TEXT. If TICK-WIDTH is positive, then the ticks are TICK-WIDTH long on the right side of X-COORD; and TEXT and numeric @@ -6813,7 +6909,7 @@ File: slib.info, Node: Legending, Next: Legacy Plotting, Prev: Rectangles, U ticks are -TICK-WIDTH long on the left side of X-COORD; and TEXT and numeric legends are on the right. - -- Function: rule-horizontal x-coord text tick-height | + -- Function: rule-horizontal x-coord text tick-height Draws a horizontal ruler with X coordinate X-COORD and labeled with string TEXT. If TICK-HEIGHT is positive, then the ticks are TICK-HEIGHT long on the right side of X-COORD; and TEXT and @@ -6821,38 +6917,43 @@ File: slib.info, Node: Legending, Next: Legacy Plotting, Prev: Rectangles, U the ticks are -TICK-HEIGHT long on the left side of X-COORD; and TEXT and numeric legends are on the right. - -- Function: y-axis | + -- Function: y-axis Draws the y-axis. - -- Function: x-axis | + -- Function: x-axis Draws the x-axis. - -- Function: grid-verticals | + -- Function: grid-verticals Draws vertical lines through `graphrect' at each tick on the vertical ruler. - -- Function: grid-horizontals | + -- Function: grid-horizontals Draws horizontal lines through `graphrect' at each tick on the horizontal ruler. File: slib.info, Node: Legacy Plotting, Next: Example Graph, Prev: Legending, Up: PostScript Graphing -5.7.2.6 Legacy Plotting | -....................... | +5.7.2.6 Legacy Plotting +....................... - -- Variable: graph:dimensions | + -- Variable: graph:dimensions A list of the width and height of the graph to be plotted using `plot'. - -- Function: plot func x1 x2 npts | - -- Function: plot func x1 x2 | + -- Function: plot func x1 x2 npts + -- Function: plot func x1 x2 Creates and displays using `(system "gv tmp.eps")' an encapsulated PostScript graph of the function of one argument FUNC over the range X1 to X2. If the optional integer argument NPTS is supplied, it specifies the number of points to evaluate FUNC at. - -- Function: plot coords x-label y-label | + -- Function: x1 x2 npts func1 func2 ... | + Creates and displays an encapsulated PostScript graph of the | + one-argument functions FUNC1, FUNC2, ... over the range X1 to X2 | + at NPTS points. | + | + -- Function: plot coords x-label y-label COORDS is a list or vector of coordinates, lists of x and y coordinates. X-LABEL and Y-LABEL are strings with which to label the x and y axes. @@ -6860,8 +6961,8 @@ File: slib.info, Node: Legacy Plotting, Next: Example Graph, Prev: Legending, File: slib.info, Node: Example Graph, Prev: Legacy Plotting, Up: PostScript Graphing -5.7.2.7 Example Graph | -..................... | +5.7.2.7 Example Graph +..................... The file `am1.5.html', a table of solar irradiance, is fetched with `wget' if it isn't already in the working directory. The file is read @@ -6914,7 +7015,7 @@ scales. (define lines '()) (do ((line (read-line iprt) (read-line iprt))) ((eof-object? line) - (let ((nra (make-array (A:floR64b) | + (let ((nra (make-array (A:floR64b) (length lines) (length (car lines))))) (do ((lns lines (cdr lns)) @@ -6962,27 +7063,27 @@ scales. File: slib.info, Node: Solid Modeling, Next: Color, Prev: Graphing, Up: Mathematical Packages -5.8 Solid Modeling | -================== | +5.8 Solid Modeling +================== `(require 'solid)' -`http://swiss.csail.mit.edu/~jaffer/Solid/#Example' gives an example | +`http://swiss.csail.mit.edu/~jaffer/Solid/#Example' gives an example use of this package. - -- Function: vrml node ... | + -- Function: vrml node ... Returns the VRML97 string (including header) of the concatenation of strings NODES, .... - -- Function: vrml-append node1 node2 ... | + -- Function: vrml-append node1 node2 ... Returns the concatenation with interdigitated newlines of strings NODE1, NODE2, .... - -- Function: vrml-to-file file node ... | + -- Function: vrml-to-file file node ... Writes to file named FILE the VRML97 string (including header) of the concatenation of strings NODES, .... - -- Function: world:info title info ... | + -- Function: world:info title info ... Returns a VRML97 string setting the title of the file in which it appears to TITLE. Additional strings INFO, ... are comments. @@ -6991,11 +7092,11 @@ appear in the resulting VRML code. This string turns off the headlight at the viewpoint: " NavigationInfo {headlight FALSE}" - -- Function: scene:panorama front right back left top bottom | + -- Function: scene:panorama front right back left top bottom Specifies the distant images on the inside faces of the cube enclosing the virtual world. - -- Function: scene:sphere colors angles | + -- Function: scene:sphere colors angles COLORS is a list of color objects. Each may be of type *Note color: Color Data-Type, a 24-bit sRGB integer, or a list of 3 numbers between 0.0 and 1.0. @@ -7006,16 +7107,16 @@ at the viewpoint: are taken from the colors paired with the angles nearest them. `scene:sphere' fills horizontal bands with interpolated colors on - the background sphere encasing the world. | + the background sphere encasing the world. - -- Function: scene:sky-and-dirt | - Returns a blue and brown background sphere encasing the world. | + -- Function: scene:sky-and-dirt + Returns a blue and brown background sphere encasing the world. - -- Function: scene:sky-and-grass | - Returns a blue and green background sphere encasing the world. | + -- Function: scene:sky-and-grass + Returns a blue and green background sphere encasing the world. - -- Function: scene:sun latitude julian-day hour turbidity strength | - -- Function: scene:sun latitude julian-day hour turbidity | + -- Function: scene:sun latitude julian-day hour turbidity strength + -- Function: scene:sun latitude julian-day hour turbidity LATITUDE is the virtual place's latitude in degrees. JULIAN-DAY is an integer from 0 to 366, the day of the year. HOUR is a real number from 0 to 24 for the time of day; 12 is noon. TURBIDITY is @@ -7025,8 +7126,8 @@ at the viewpoint: would be at HOUR on JULIAN-DAY at LATITUDE. If STRENGTH is positive, included is a light source of STRENGTH (default 1). - -- Function: scene:overcast latitude julian-day hour turbidity strength | - -- Function: scene:overcast latitude julian-day hour turbidity | + -- Function: scene:overcast latitude julian-day hour turbidity strength + -- Function: scene:overcast latitude julian-day hour turbidity LATITUDE is the virtual place's latitude in degrees. JULIAN-DAY is an integer from 0 to 366, the day of the year. HOUR is a real number from 0 to 24 for the time of day; 12 is noon. TURBIDITY is @@ -7039,14 +7140,14 @@ at the viewpoint: Viewpoints are objects in the virtual world, and can be transformed individually or with solid objects. - -- Function: scene:viewpoint name distance compass pitch | - -- Function: scene:viewpoint name distance compass | + -- Function: scene:viewpoint name distance compass pitch + -- Function: scene:viewpoint name distance compass Returns a viewpoint named NAME facing the origin and placed DISTANCE from it. COMPASS is a number from 0 to 360 giving the compass heading. PITCH is a number from -90 to 90, defaulting to 0, specifying the angle from the horizontal. - -- Function: scene:viewpoints proximity | + -- Function: scene:viewpoints proximity Returns 6 viewpoints, one at the center of each face of a cube with sides 2 * PROXIMITY, centered on the origin. @@ -7068,8 +7169,8 @@ It is sometimes useful for light sources to be brighter than `1'. When INTENSITY arguments are greater than 1, these functions gang multiple sources to reach the desired strength. - -- Function: light:ambient color intensity | - -- Function: light:ambient color | + -- Function: light:ambient color intensity + -- Function: light:ambient color Ambient light shines on all surfaces with which it is grouped. COLOR is a an object of type *Note color: Color Data-Type, a @@ -7080,9 +7181,9 @@ sources to reach the desired strength. `light:ambient' returns a light source or sources of COLOR with total strength of INTENSITY (or 1 if omitted). - -- Function: light:directional color direction intensity | - -- Function: light:directional color direction | - -- Function: light:directional color | + -- Function: light:directional color direction intensity + -- Function: light:directional color direction + -- Function: light:directional color Directional light shines parallel rays with uniform intensity on all objects with which it is grouped. @@ -7102,10 +7203,10 @@ sources to reach the desired strength. `light:directional' returns a light source or sources of COLOR with total strength of INTENSITY, shining from DIRECTION. - -- Function: light:beam attenuation radius aperture peak | - -- Function: light:beam attenuation radius aperture | - -- Function: light:beam attenuation radius | - -- Function: light:beam attenuation | + -- Function: light:beam attenuation radius aperture peak + -- Function: light:beam attenuation radius aperture + -- Function: light:beam attenuation radius + -- Function: light:beam attenuation ATTENUATION is a list or vector of three nonnegative real numbers specifying the reduction of intensity, the reduction of intensity with distance, and the reduction of intensity as the square of @@ -7116,10 +7217,10 @@ sources to reach the desired strength. the light's axis through which it sheds some light. PEAK is a real number between 0 and 90, the angle of greatest illumination. - -- Function: light:point location color intensity beam | - -- Function: light:point location color intensity | - -- Function: light:point location color | - -- Function: light:point location | + -- Function: light:point location color intensity beam + -- Function: light:point location color intensity + -- Function: light:point location color + -- Function: light:point location Point light radiates from LOCATION, intensity decreasing with distance, towards all objects with which it is grouped. @@ -7134,11 +7235,11 @@ sources to reach the desired strength. that the pointlight itself is not visible. To make it so, place an object with emissive appearance at LOCATION. - -- Function: light:spot location direction color intensity beam | - -- Function: light:spot location direction color intensity | - -- Function: light:spot location direction color | - -- Function: light:spot location direction | - -- Function: light:spot location | + -- Function: light:spot location direction color intensity beam + -- Function: light:spot location direction color intensity + -- Function: light:spot location direction color + -- Function: light:spot location direction + -- Function: light:spot location Spot light radiates from LOCATION towards DIRECTION, intensity decreasing with distance, illuminating objects with which it is grouped. @@ -7164,8 +7265,8 @@ sources to reach the desired strength. Object Primitives ----------------- - -- Function: solid:box geometry appearance | - -- Function: solid:box geometry | + -- Function: solid:box geometry appearance + -- Function: solid:box geometry GEOMETRY must be a number or a list or vector of three numbers. If GEOMETRY is a number, the `solid:box' returns a cube with sides of length GEOMETRY centered on the origin. Otherwise, `solid:box' @@ -7173,41 +7274,41 @@ Object Primitives origin. APPEARANCE determines the surface properties of the returned object. - -- Function: solid:cylinder radius height appearance | - -- Function: solid:cylinder radius height | - Returns a right cylinder with dimensions `(abs RADIUS)' and `(abs | - HEIGHT)' centered on the origin. If HEIGHT is positive, then the | - cylinder ends will be capped. If RADIUS is negative, then only | - the ends will appear. APPEARANCE determines the surface | - properties of the returned object. | + -- Function: solid:cylinder radius height appearance + -- Function: solid:cylinder radius height + Returns a right cylinder with dimensions `(abs RADIUS)' and `(abs + HEIGHT)' centered on the origin. If HEIGHT is positive, then the + cylinder ends will be capped. If RADIUS is negative, then only + the ends will appear. APPEARANCE determines the surface + properties of the returned object. - -- Function: solid:disk radius thickness appearance | - -- Function: solid:disk radius thickness | + -- Function: solid:disk radius thickness appearance + -- Function: solid:disk radius thickness THICKNESS must be a positive real number. `solid:disk' returns a circular disk with dimensions RADIUS and THICKNESS centered on the origin. APPEARANCE determines the surface properties of the returned object. - -- Function: solid:cone radius height appearance | - -- Function: solid:cone radius height | + -- Function: solid:cone radius height appearance + -- Function: solid:cone radius height Returns an isosceles cone with dimensions RADIUS and HEIGHT centered on the origin. APPEARANCE determines the surface properties of the returned object. - -- Function: solid:pyramid side height appearance | - -- Function: solid:pyramid side height | + -- Function: solid:pyramid side height appearance + -- Function: solid:pyramid side height Returns an isosceles pyramid with dimensions SIDE and HEIGHT centered on the origin. APPEARANCE determines the surface properties of the returned object. - -- Function: solid:sphere radius appearance | - -- Function: solid:sphere radius | + -- Function: solid:sphere radius appearance + -- Function: solid:sphere radius Returns a sphere of radius RADIUS centered on the origin. APPEARANCE determines the surface properties of the returned object. - -- Function: solid:ellipsoid geometry appearance | - -- Function: solid:ellipsoid geometry | + -- Function: solid:ellipsoid geometry appearance + -- Function: solid:ellipsoid geometry GEOMETRY must be a number or a list or vector of three numbers. If GEOMETRY is a number, the `solid:ellipsoid' returns a sphere of diameter GEOMETRY centered on the origin. Otherwise, @@ -7215,23 +7316,23 @@ Object Primitives centered on the origin. APPEARANCE determines the surface properties of the returned object. - -- Function: solid:polyline coordinates appearance | - -- Function: solid:polyline coordinates | - COORDINATES must be a list or vector of coordinate lists or vectors | - specifying the x, y, and z coordinates of points. | - `solid:polyline' returns lines connecting successive pairs of | - points. If called with one argument, then the polyline will be | - white. If APPEARANCE is given, then the polyline will have its | - emissive color only; being black if APPEARANCE does not have an | - emissive color. | - | - The following code will return a red line between points at `(1 2 | - 3)' and `(4 5 6)': | + -- Function: solid:polyline coordinates appearance + -- Function: solid:polyline coordinates + COORDINATES must be a list or vector of coordinate lists or vectors + specifying the x, y, and z coordinates of points. + `solid:polyline' returns lines connecting successive pairs of + points. If called with one argument, then the polyline will be + white. If APPEARANCE is given, then the polyline will have its + emissive color only; being black if APPEARANCE does not have an + emissive color. + + The following code will return a red line between points at `(1 2 + 3)' and `(4 5 6)': (solid:polyline '((1 2 3) (4 5 6)) (solid:color #f 0 #f 0 '(1 0 0))) - | - -- Function: solid:basrelief width height depth colorray appearance | - -- Function: solid:basrelief width height depth appearance | - -- Function: solid:basrelief width height depth | + + -- Function: solid:basrelief width height depth colorray appearance + -- Function: solid:basrelief width height depth appearance + -- Function: solid:basrelief width height depth One of WIDTH, HEIGHT, or DEPTH must be a 2-dimensional array; the others must be real numbers giving the length of the basrelief in those dimensions. The rest of this description assumes that @@ -7252,52 +7353,52 @@ Object Primitives COLORRAY paints the corresponding face of HEIGHT. Other dimensions for COLORRAY are in error. - -- Function: solid:text fontstyle str len appearance | - -- Function: solid:text fontstyle str len | - FONTSTYLE must be a value returned by `solid:font'. | - | - STR must be a string or list of strings. | - | - LEN must be #f, a nonnegative integer, or list of nonnegative | - integers. | - | - APPEARANCE, if given, determines the surface properties of the | - returned object. | - | - `solid:text' returns a two-sided, flat text object positioned in | - the Z=0 plane of the local coordinate system | - | + -- Function: solid:text fontstyle str len appearance + -- Function: solid:text fontstyle str len + FONTSTYLE must be a value returned by `solid:font'. + + STR must be a string or list of strings. + + LEN must be #f, a nonnegative integer, or list of nonnegative + integers. + + APPEARANCE, if given, determines the surface properties of the + returned object. + + `solid:text' returns a two-sided, flat text object positioned in + the Z=0 plane of the local coordinate system + Surface Attributes ------------------ - -- Function: solid:color diffuseColor ambientIntensity specularColor | + -- Function: solid:color diffuseColor ambientIntensity specularColor shininess emissiveColor transparency - -- Function: solid:color diffuseColor ambientIntensity specularColor | + -- Function: solid:color diffuseColor ambientIntensity specularColor shininess emissiveColor - -- Function: solid:color diffuseColor ambientIntensity specularColor | + -- Function: solid:color diffuseColor ambientIntensity specularColor shininess - -- Function: solid:color diffuseColor ambientIntensity specularColor | - -- Function: solid:color diffuseColor ambientIntensity | - -- Function: solid:color diffuseColor | - Returns an "appearance", the optical properties of the objects with | - which it is associated. AMBIENTINTENSITY, SHININESS, and | + -- Function: solid:color diffuseColor ambientIntensity specularColor + -- Function: solid:color diffuseColor ambientIntensity + -- Function: solid:color diffuseColor + Returns an "appearance", the optical properties of the objects with + which it is associated. AMBIENTINTENSITY, SHININESS, and TRANSPARENCY must be numbers between 0 and 1. DIFFUSECOLOR, SPECULARCOLOR, and EMISSIVECOLOR are objects of type *Note color: Color Data-Type, 24-bit sRGB integers or lists of 3 numbers between 0.0 and 1.0. If a color argument is omitted or #f, then the default color will be used. - -- Function: solid:texture image color scale rotation center | - translation | - -- Function: solid:texture image color scale rotation center | - -- Function: solid:texture image color scale rotation | - -- Function: solid:texture image color scale | - -- Function: solid:texture image color | - -- Function: solid:texture image | - Returns an "appearance", the optical properties of the objects with | - which it is associated. IMAGE is a string naming a JPEG or PNG | - image resource. COLOR is #f, a color, or the string returned by | - `solid:color'. The rest of the optional arguments specify | + -- Function: solid:texture image color scale rotation center + translation + -- Function: solid:texture image color scale rotation center + -- Function: solid:texture image color scale rotation + -- Function: solid:texture image color scale + -- Function: solid:texture image color + -- Function: solid:texture image + Returns an "appearance", the optical properties of the objects with + which it is associated. IMAGE is a string naming a JPEG or PNG + image resource. COLOR is #f, a color, or the string returned by + `solid:color'. The rest of the optional arguments specify 2-dimensional transforms applying to the IMAGE. SCALE must be #f, a number, or list or vector of 2 numbers @@ -7308,75 +7409,75 @@ Surface Attributes list or vector of 2 numbers specifying the translation to apply to IMAGE. - -- Function: solid:font family style justify size spacing language | - direction | - Returns a fontstyle object suitable for passing as an argument to | - `solid:text'. Any of the arguments may be #f, in which case its | - default value, which is first in each list of allowed values, is | - used. | - | - FAMILY is a case-sensitive string naming a font; `SERIF', `SANS', | - and `TYPEWRITER' are supported at the minimum. | - | - STYLE is a case-sensitive string `PLAIN', `BOLD', `ITALIC', or | - `BOLDITALIC'. | - | - JUSTIFY is a case-sensitive string `FIRST', `BEGIN', `MIDDLE', or | - `END'; or a list of one or two case-sensitive strings (same | - choices). The mechanics of JUSTIFY get complicated; it is | - explained by tables 6.2 to 6.7 of | + -- Function: solid:font family style justify size spacing language + direction + Returns a fontstyle object suitable for passing as an argument to + `solid:text'. Any of the arguments may be #f, in which case its + default value, which is first in each list of allowed values, is + used. + + FAMILY is a case-sensitive string naming a font; `SERIF', `SANS', + and `TYPEWRITER' are supported at the minimum. + + STYLE is a case-sensitive string `PLAIN', `BOLD', `ITALIC', or + `BOLDITALIC'. + + JUSTIFY is a case-sensitive string `FIRST', `BEGIN', `MIDDLE', or + `END'; or a list of one or two case-sensitive strings (same + choices). The mechanics of JUSTIFY get complicated; it is + explained by tables 6.2 to 6.7 of `http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html#Table6.2' - | - SIZE is the extent, in the non-advancing direction, of the text. | - SIZE defaults to 1. | - | - SPACING is the ratio of the line (or column) offset to SIZE. | - SPACING defaults to 1. | - | - LANGUAGE is the RFC-1766 language name. | - | - DIRECTION is a list of two numbers: `(X Y)'. If | - `(> (abs X) (abs Y))', then the text will be arrayed horizontally; | - otherwise vertically. The direction in which characters are | - arrayed is determined by the sign of the major axis: positive X | - being left-to-right; positive Y being top-to-bottom. | - | + + SIZE is the extent, in the non-advancing direction, of the text. + SIZE defaults to 1. + + SPACING is the ratio of the line (or column) offset to SIZE. + SPACING defaults to 1. + + LANGUAGE is the RFC-1766 language name. + + DIRECTION is a list of two numbers: `(X Y)'. If + `(> (abs X) (abs Y))', then the text will be arrayed horizontally; + otherwise vertically. The direction in which characters are + arrayed is determined by the sign of the major axis: positive X + being left-to-right; positive Y being top-to-bottom. + Aggregating Objects ------------------- - -- Function: solid:center-row-of number solid spacing | + -- Function: solid:center-row-of number solid spacing Returns a row of NUMBER SOLID objects spaced evenly SPACING apart. - -- Function: solid:center-array-of number-a number-b solid spacing-a | + -- Function: solid:center-array-of number-a number-b solid spacing-a spacing-b Returns NUMBER-B rows, SPACING-B apart, of NUMBER-A SOLID objects SPACING-A apart. - -- Function: solid:center-pile-of number-a number-b number-c solid | + -- Function: solid:center-pile-of number-a number-b number-c solid spacing-a spacing-b spacing-c Returns NUMBER-C planes, SPACING-C apart, of NUMBER-B rows, SPACING-B apart, of NUMBER-A SOLID objects SPACING-A apart. - -- Function: solid:arrow center | + -- Function: solid:arrow center CENTER must be a list or vector of three numbers. Returns an upward pointing metallic arrow centered at CENTER. - -- Function: solid:arrow | + -- Function: solid:arrow Returns an upward pointing metallic arrow centered at the origin. Spatial Transformations ----------------------- - -- Function: solid:translation center solid ... | + -- Function: solid:translation center solid ... CENTER must be a list or vector of three numbers. `solid:translation' Returns an aggregate of SOLIDS, ... with their origin moved to CENTER. - -- Function: solid:scale scale solid ... | + -- Function: solid:scale scale solid ... SCALE must be a number or a list or vector of three numbers. `solid:scale' Returns an aggregate of SOLIDS, ... scaled per SCALE. - -- Function: solid:rotation axis angle solid ... | + -- Function: solid:rotation axis angle solid ... AXIS must be a list or vector of three numbers. `solid:rotation' Returns an aggregate of SOLIDS, ... rotated ANGLE degrees around the axis AXIS. @@ -7384,10 +7485,10 @@ Spatial Transformations File: slib.info, Node: Color, Next: Root Finding, Prev: Solid Modeling, Up: Mathematical Packages -5.9 Color | -========= | +5.9 Color +========= -`http://swiss.csail.mit.edu/~jaffer/Color' | +`http://swiss.csail.mit.edu/~jaffer/Color' The goals of this package are to provide methods to specify, compute, and transform colors in a core set of additive color spaces. The color @@ -7407,15 +7508,15 @@ encountered in practice and the literature. File: slib.info, Node: Color Data-Type, Next: Color Spaces, Prev: Color, Up: Color -5.9.1 Color Data-Type | ---------------------- | +5.9.1 Color Data-Type +--------------------- `(require 'color)' - -- Function: color? obj | + -- Function: color? obj Returns #t if OBJ is a color. - -- Function: color? obj typ | + -- Function: color? obj typ Returns #t if OBJ is a color of color-space TYP. The symbol TYP must be one of: @@ -7433,37 +7534,37 @@ File: slib.info, Node: Color Data-Type, Next: Color Spaces, Prev: Color, Up: * L*C*h - -- Function: make-color space arg ... | + -- Function: make-color space arg ... Returns a color of type SPACE. - * For SPACE arguments `CIEXYZ', `RGB709', and `sRGB', the sole | - ARG is a list of three numbers. | - | - * For SPACE arguments `L*a*b*', `L*u*v*', and `L*C*h', ARG is a | - list of three numbers optionally followed by a whitepoint. | - | - * For `xRGB', ARG is an integer. | - | - * For `e-sRGB', the arguments are as for `e-sRGB->color'. | - | - -- Function: color-space color | + * For SPACE arguments `CIEXYZ', `RGB709', and `sRGB', the sole + ARG is a list of three numbers. + + * For SPACE arguments `L*a*b*', `L*u*v*', and `L*C*h', ARG is a + list of three numbers optionally followed by a whitepoint. + + * For `xRGB', ARG is an integer. + + * For `e-sRGB', the arguments are as for `e-sRGB->color'. + + -- Function: color-space color Returns the symbol for the color-space in which COLOR is embedded. - -- Function: color-precision color | + -- Function: color-precision color For colors in digital color-spaces, `color-precision' returns the number of bits used for each of the R, G, and B channels of the encoding. Otherwise, `color-precision' returns #f - -- Function: color-white-point color | + -- Function: color-white-point color Returns the white-point of COLOR in all color-spaces except CIEXYZ. - -- Function: convert-color color space white-point | - -- Function: convert-color color space | - -- Function: convert-color color e-sRGB precision | + -- Function: convert-color color space white-point + -- Function: convert-color color space + -- Function: convert-color color e-sRGB precision Converts COLOR into SPACE at optional WHITE-POINT. -5.9.1.1 External Representation | -............................... | +5.9.1.1 External Representation +............................... Each color encoding has an external, case-insensitive representation. To ensure portability, the white-point for all color strings is D65. @@ -7498,16 +7599,16 @@ sRGB #x<RRGGBB> Where RRGGBB is a non-negative six-digit hexadecimal number. - -- Function: color->string color | + -- Function: color->string color Returns a string representation of COLOR. - -- Function: string->color string | + -- Function: string->color string Returns the color represented by STRING. If STRING is not a syntactically valid notation for a color, then `string->color' returns #f. -5.9.1.2 White | -............. | +5.9.1.2 White +............. We experience color relative to the illumination around us. CIEXYZ coordinates, although subject to uniform scaling, are objective. Thus @@ -7519,11 +7620,11 @@ spaces a WHITE-POINT argument can be specified. The default if none is specified is the white-point with which the color was created or last converted; and D65 if none has been specified. - -- Constant: D65 | + -- Constant: D65 Is the color of 6500.K (blackbody) illumination. D65 is close to the average color of daylight. - -- Constant: D50 | + -- Constant: D50 Is the color of 5000.K (blackbody) illumination. D50 is the color of indoor lighting by incandescent bulbs, whose filaments have temperatures around 5000.K. @@ -7541,58 +7642,58 @@ device-dependent RGBi and RGB spaces of Xlib. File: slib.info, Node: Color Spaces, Next: Spectra, Prev: Color Data-Type, Up: Color -5.9.2 Color Spaces | ------------------- | +5.9.2 Color Spaces +------------------ Measurement-based Color Spaces .............................. The "tristimulus" color spaces are those whose component values are proportional measurements of light intensity. The CIEXYZ(1931) system -provides 3 sets of spectra to dot-product with a spectrum of interest. | -The result of those dot-products is coordinates in CIEXYZ space. All | +provides 3 sets of spectra to dot-product with a spectrum of interest. +The result of those dot-products is coordinates in CIEXYZ space. All tristimuls color spaces are related to CIEXYZ by linear transforms, namely matrix multiplication. Of the color spaces listed here, CIEXYZ and RGB709 are tristimulus spaces. - -- Color Space: CIEXYZ | + -- Color Space: CIEXYZ The CIEXYZ color space covers the full "gamut". It is the basis for color-space conversions. - CIEXYZ is a list of three inexact numbers between 0.0 and 1.1. | - '(0. 0. 0.) is black; '(1. 1. 1.) is white. | + CIEXYZ is a list of three inexact numbers between 0.0 and 1.1. + '(0. 0. 0.) is black; '(1. 1. 1.) is white. - -- Function: ciexyz->color xyz | + -- Function: ciexyz->color xyz XYZ must be a list of 3 numbers. If XYZ is valid CIEXYZ coordinates, then `ciexyz->color' returns the color specified by XYZ; otherwise returns #f. - -- Function: color:ciexyz x y z | + -- Function: color:ciexyz x y z Returns the CIEXYZ color composed of X, Y, Z. If the coordinates do not encode a valid CIEXYZ color, then an error is signaled. - -- Function: color->ciexyz color | + -- Function: color->ciexyz color Returns the list of 3 numbers encoding COLOR in CIEXYZ. - -- Color Space: RGB709 | + -- Color Space: RGB709 BT.709-4 (03/00) `Parameter values for the HDTV standards for production and international programme exchange' specifies parameter values for chromaticity, sampling, signal format, frame rates, etc., of high definition television signals. An RGB709 color is represented by a list of three inexact numbers - between 0.0 and 1.0. '(0. 0. 0.) is black '(1. 1. 1.) is white. | + between 0.0 and 1.0. '(0. 0. 0.) is black '(1. 1. 1.) is white. - -- Function: rgb709->color rgb | + -- Function: rgb709->color rgb RGB must be a list of 3 numbers. If RGB is valid RGB709 coordinates, then `rgb709->color' returns the color specified by RGB; otherwise returns #f. - -- Function: color:rgb709 r g b | + -- Function: color:rgb709 r g b Returns the RGB709 color composed of R, G, B. If the coordinates do not encode a valid RGB709 color, then an error is signaled. - -- Function: color->rgb709 color | + -- Function: color->rgb709 color Returns the list of 3 numbers encoding COLOR in RGB709. Perceptual Uniformity @@ -7605,7 +7706,7 @@ range of distances (6:1) in the L*a*b* and L*u*v* spaces than in tristimulus spaces (80:1). For this reason, color distances are computed in L*a*b* (or L*C*h). - -- Color Space: L*a*b* | + -- Color Space: L*a*b* Is a CIE color space which better matches the human visual system's perception of color. It is a list of three numbers: @@ -7615,48 +7716,48 @@ computed in L*a*b* (or L*C*h). * -200 <= b* <= 200 - -- Function: l*a*b*->color L*a*b* white-point | + -- Function: l*a*b*->color L*a*b* white-point L*A*B* must be a list of 3 numbers. If L*A*B* is valid L*a*b* coordinates, then `l*a*b*->color' returns the color specified by L*A*B*; otherwise returns #f. - -- Function: color:l*a*b* L* a* b* white-point | + -- Function: color:l*a*b* L* a* b* white-point Returns the L*a*b* color composed of L*, A*, B* with WHITE-POINT. - -- Function: color:l*a*b* L* a* b* | + -- Function: color:l*a*b* L* a* b* Returns the L*a*b* color composed of L*, A*, B*. If the coordinates do not encode a valid L*a*b* color, then an error is signaled. - -- Function: color->l*a*b* color white-point | + -- Function: color->l*a*b* color white-point Returns the list of 3 numbers encoding COLOR in L*a*b* with WHITE-POINT. - -- Function: color->l*a*b* color | + -- Function: color->l*a*b* color Returns the list of 3 numbers encoding COLOR in L*a*b*. - -- Color Space: L*u*v* | + -- Color Space: L*u*v* Is another CIE encoding designed to better match the human visual system's perception of color. - -- Function: l*u*v*->color L*u*v* white-point | + -- Function: l*u*v*->color L*u*v* white-point L*U*V* must be a list of 3 numbers. If L*U*V* is valid L*u*v* coordinates, then `l*u*v*->color' returns the color specified by L*U*V*; otherwise returns #f. - -- Function: color:l*u*v* L* u* v* white-point | + -- Function: color:l*u*v* L* u* v* white-point Returns the L*u*v* color composed of L*, U*, V* with WHITE-POINT. - -- Function: color:l*u*v* L* u* v* | + -- Function: color:l*u*v* L* u* v* Returns the L*u*v* color composed of L*, U*, V*. If the coordinates do not encode a valid L*u*v* color, then an error is signaled. - -- Function: color->l*u*v* color white-point | + -- Function: color->l*u*v* color white-point Returns the list of 3 numbers encoding COLOR in L*u*v* with WHITE-POINT. - -- Function: color->l*u*v* color | + -- Function: color->l*u*v* color Returns the list of 3 numbers encoding COLOR in L*u*v*. Cylindrical Coordinates @@ -7672,7 +7773,7 @@ specification of color must be device-dependent. But take heart! A cylindrical system can be based on L*a*b* and is used for predicting how close colors seem to observers. - -- Color Space: L*C*h | + -- Color Space: L*C*h Expresses the *a and b* of L*a*b* in polar coordinates. It is a list of three numbers: @@ -7691,23 +7792,23 @@ close colors seem to observers. 270 blue, purple, magenta 360 - -- Function: l*c*h->color L*C*h white-point | + -- Function: l*c*h->color L*C*h white-point L*C*H must be a list of 3 numbers. If L*C*H is valid L*C*h coordinates, then `l*c*h->color' returns the color specified by L*C*H; otherwise returns #f. - -- Function: color:l*c*h L* C* h white-point | + -- Function: color:l*c*h L* C* h white-point Returns the L*C*h color composed of L*, C*, H with WHITE-POINT. - -- Function: color:l*c*h L* C* h | + -- Function: color:l*c*h L* C* h Returns the L*C*h color composed of L*, C*, H. If the coordinates do not encode a valid L*C*h color, then an error is signaled. - -- Function: color->l*c*h color white-point | + -- Function: color->l*c*h color white-point Returns the list of 3 numbers encoding COLOR in L*C*h with WHITE-POINT. - -- Function: color->l*c*h color | + -- Function: color->l*c*h color Returns the list of 3 numbers encoding COLOR in L*C*h. Digital Color Spaces @@ -7716,7 +7817,7 @@ Digital Color Spaces The color spaces discussed so far are impractical for image data because of numerical precision and computational requirements. In 1998 the IEC adopted `A Standard Default Color Space for the Internet - sRGB' -(`http://www.w3.org/Graphics/Color/sRGB'). sRGB was cleverly designed | +(`http://www.w3.org/Graphics/Color/sRGB'). sRGB was cleverly designed to employ the 24-bit (256x256x256) color encoding already in widespread use; and the 2.2 gamma intrinsic to CRT monitors. @@ -7726,36 +7827,36 @@ then each coordinate is individually subjected to the same non-linear mapping. Inverse operations in the reverse order create the inverse transform. - -- Color Space: sRGB | + -- Color Space: sRGB Is "A Standard Default Color Space for the Internet". Most display monitors will work fairly well with sRGB directly. Systems using ICC profiles (1) should work very well with sRGB. - -- Function: srgb->color rgb | + -- Function: srgb->color rgb RGB must be a list of 3 numbers. If RGB is valid sRGB coordinates, then `srgb->color' returns the color specified by RGB; otherwise returns #f. - -- Function: color:srgb r g b | + -- Function: color:srgb r g b Returns the sRGB color composed of R, G, B. If the coordinates do not encode a valid sRGB color, then an error is signaled. - -- Color Space: xRGB | + -- Color Space: xRGB Represents the equivalent sRGB color with a single 24-bit integer. The most significant 8 bits encode red, the middle 8 bits blue, and the least significant 8 bits green. - -- Function: color->srgb color | + -- Function: color->srgb color Returns the list of 3 integers encoding COLOR in sRGB. - -- Function: color->xrgb color | + -- Function: color->xrgb color Returns the 24-bit integer encoding COLOR in sRGB. - -- Function: xrgb->color k | + -- Function: xrgb->color k Returns the sRGB color composed of the 24-bit integer K. - -- Color Space: e-sRGB | + -- Color Space: e-sRGB Is "Photography - Electronic still picture imaging - Extended sRGB color encoding" (PIMA 7667:2001). It extends the gamut of sRGB; and its higher precision numbers provide a larger dynamic range. @@ -7772,32 +7873,32 @@ transform. e-sRGB16 0 to 65535 - -- Function: e-srgb->color precision rgb | + -- Function: e-srgb->color precision rgb PRECISION must be the integer 10, 12, or 16. RGB must be a list of 3 numbers. If RGB is valid e-sRGB coordinates, then `e-srgb->color' returns the color specified by RGB; otherwise returns #f. - -- Function: color:e-srgb 10 r g b | + -- Function: color:e-srgb 10 r g b Returns the e-sRGB10 color composed of integers R, G, B. - -- Function: color:e-srgb 12 r g b | + -- Function: color:e-srgb 12 r g b Returns the e-sRGB12 color composed of integers R, G, B. - -- Function: color:e-srgb 16 r g b | + -- Function: color:e-srgb 16 r g b Returns the e-sRGB16 color composed of integers R, G, B. If the coordinates do not encode a valid e-sRGB color, then an error is signaled. - -- Function: color->e-srgb precision color | + -- Function: color->e-srgb precision color PRECISION must be the integer 10, 12, or 16. `color->e-srgb' returns the list of 3 integers encoding COLOR in sRGB10, sRGB12, or sRGB16. ---------- Footnotes ---------- - (1) A comprehensive encoding of transforms between CIEXYZ and device | -color spaces is the International Color Consortium profile format, | + (1) A comprehensive encoding of transforms between CIEXYZ and device +color spaces is the International Color Consortium profile format, ICC.1:1998-09: The intent of this format is to provide a cross-platform device @@ -7808,8 +7909,8 @@ ICC.1:1998-09: File: slib.info, Node: Spectra, Next: Color Difference Metrics, Prev: Color Spaces, Up: Color -5.9.3 Spectra | -------------- | +5.9.3 Spectra +------------- The following functions compute colors from spectra, scale color luminance, and extract chromaticity. XYZ is used in the names of @@ -7831,15 +7932,15 @@ CIEXYZ values are calculated as dot-product with the X, Y (Luminance), and Z "Spectral Tristimulus Values". The files `cie1931.xyz' and `cie1964.xyz' in the distribution contain these CIE-defined values. - -- Feature: cie1964 | + -- Feature: cie1964 Loads the Spectral Tristimulus Values defining `CIE 1964 Supplementary Standard Colorimetric Observer'. - -- Feature: cie1931 | + -- Feature: cie1931 Loads the Spectral Tristimulus Values defining `CIE 1931 Supplementary Standard Colorimetric Observer'. - -- Feature: ciexyz | + -- Feature: ciexyz Requires Spectral Tristimulus Values, defaulting to cie1931. `(require 'cie1964)' or `(require 'cie1931)' will `load-ciexyz' @@ -7847,55 +7948,55 @@ specific values used by the following spectrum conversion procedures. The spectrum conversion procedures `(require 'ciexyz)' to assure that a set is loaded. - -- Function: read-cie-illuminant path | - PATH must be a string naming a file consisting of 107 numbers for | - 5.nm intervals from 300.nm to 830.nm. `read-cie-illuminant' reads | - (using Scheme `read') these numbers and returns a length 107 | - vector filled with them. | - | - (define CIE:SI-D65 | - (read-CIE-illuminant (in-vicinity (library-vicinity) "ciesid65.dat"))) | - (spectrum->XYZ CIE:SI-D65 300e-9 830e-9) | - => (25.108569422374994 26.418013465625001 28.764075683374993) | - | - -- Function: read-normalized-illuminant path | - PATH must be a string naming a file consisting of 107 numbers for | - 5.nm intervals from 300.nm to 830.nm. | - `read-normalized-illuminant' reads (using Scheme `read') these | - numbers and returns a length 107 vector filled with them, | - normalized so that `spectrum->XYZ' of the illuminant returns its | - whitepoint. | - | - CIE Standard Illuminants A and D65 are included with SLIB: | - | - (define CIE:SI-A | + -- Function: read-cie-illuminant path + PATH must be a string naming a file consisting of 107 numbers for + 5.nm intervals from 300.nm to 830.nm. `read-cie-illuminant' reads + (using Scheme `read') these numbers and returns a length 107 + vector filled with them. + + (define CIE:SI-D65 + (read-CIE-illuminant (in-vicinity (library-vicinity) "ciesid65.dat"))) + (spectrum->XYZ CIE:SI-D65 300e-9 830e-9) + => (25.108569422374994 26.418013465625001 28.764075683374993) + + -- Function: read-normalized-illuminant path + PATH must be a string naming a file consisting of 107 numbers for + 5.nm intervals from 300.nm to 830.nm. + `read-normalized-illuminant' reads (using Scheme `read') these + numbers and returns a length 107 vector filled with them, + normalized so that `spectrum->XYZ' of the illuminant returns its + whitepoint. + + CIE Standard Illuminants A and D65 are included with SLIB: + + (define CIE:SI-A (read-normalized-illuminant (in-vicinity (library-vicinity) "ciesia.dat"))) - (define CIE:SI-D65 | + (define CIE:SI-D65 (read-normalized-illuminant (in-vicinity (library-vicinity) "ciesid65.dat"))) - (spectrum->XYZ CIE:SI-A 300e-9 830e-9) | - => (1.098499460820401 999.9999999999998e-3 355.8173930654951e-3) | - (CIEXYZ->sRGB (spectrum->XYZ CIE:SI-A 300e-9 830e-9)) | - => (255 234 133) | - (spectrum->XYZ CIE:SI-D65 300e-9 830e-9) | - => (950.4336673552745e-3 1.0000000000000002 1.0888053986649182) | - (CIEXYZ->sRGB (spectrum->XYZ CIE:SI-D65 300e-9 830e-9)) | - => (255 255 255) | - | - -- Function: illuminant-map proc siv | - SIV must be a one-dimensional array or vector of 107 numbers. | - `illuminant-map' returns a vector of length 107 containing the | - result of applying PROC to each element of SIV. | - | - -- Function: illuminant-map->XYZ proc siv | - `(spectrum->XYZ (illuminant-map PROC SIV) 300e-9 830e-9)' | - | - -- Function: spectrum->XYZ proc | + (spectrum->XYZ CIE:SI-A 300e-9 830e-9) + => (1.098499460820401 999.9999999999998e-3 355.8173930654951e-3) + (CIEXYZ->sRGB (spectrum->XYZ CIE:SI-A 300e-9 830e-9)) + => (255 234 133) + (spectrum->XYZ CIE:SI-D65 300e-9 830e-9) + => (950.4336673552745e-3 1.0000000000000002 1.0888053986649182) + (CIEXYZ->sRGB (spectrum->XYZ CIE:SI-D65 300e-9 830e-9)) + => (255 255 255) + + -- Function: illuminant-map proc siv + SIV must be a one-dimensional array or vector of 107 numbers. + `illuminant-map' returns a vector of length 107 containing the + result of applying PROC to each element of SIV. + + -- Function: illuminant-map->XYZ proc siv + `(spectrum->XYZ (illuminant-map PROC SIV) 300e-9 830e-9)' + + -- Function: spectrum->XYZ proc PROC must be a function of one argument. `spectrum->XYZ' computes the CIEXYZ(1931) values for the spectrum returned by PROC when called with arguments from 380e-9 to 780e-9, the wavelength in meters. - -- Function: spectrum->XYZ spectrum x1 x2 | + -- Function: spectrum->XYZ spectrum x1 x2 X1 and X2 must be positive real numbers specifying the wavelengths (in meters) corresponding to the zeroth and last elements of vector or list SPECTRUM. `spectrum->XYZ' returns the CIEXYZ(1931) @@ -7915,22 +8016,22 @@ set is loaded. (map (lambda (x) (/ x y_n)) xyz) => (0.2933441826889158 0.2988931825387761 0.25783646831201573) - -- Function: spectrum->chromaticity proc | - -- Function: spectrum->chromaticity spectrum x1 x2 | + -- Function: spectrum->chromaticity proc + -- Function: spectrum->chromaticity spectrum x1 x2 Computes the chromaticity for the given spectrum. - -- Function: wavelength->XYZ w | + -- Function: wavelength->XYZ w W must be a number between 380e-9 to 780e-9. `wavelength->XYZ' returns (unnormalized) XYZ values for a monochromatic light source - with wavelength W. | + with wavelength W. - -- Function: wavelength->chromaticity w | - W must be a number between 380e-9 to 780e-9. | - `wavelength->chromaticity' returns the chromaticity for a | - monochromatic light source with wavelength W. | - | - -- Function: blackbody-spectrum temp | - -- Function: blackbody-spectrum temp span | + -- Function: wavelength->chromaticity w + W must be a number between 380e-9 to 780e-9. + `wavelength->chromaticity' returns the chromaticity for a + monochromatic light source with wavelength W. + + -- Function: blackbody-spectrum temp + -- Function: blackbody-spectrum temp span Returns a procedure of one argument (wavelength in meters), which returns the radiance of a black body at TEMP. @@ -7939,10 +8040,10 @@ set is loaded. procedure correspond to the power of the photons with wavelengths W to W+1e-9. - -- Function: temperature->XYZ x | + -- Function: temperature->XYZ x The positive number X is a temperature in degrees kelvin. - `temperature->XYZ' computes the unnormalized CIEXYZ(1931) values | - for the spectrum of a black body at temperature X. | + `temperature->XYZ' computes the unnormalized CIEXYZ(1931) values + for the spectrum of a black body at temperature X. Compute the chromaticities of 6500.K and 5000.K blackbody radiation: @@ -7954,29 +8055,29 @@ set is loaded. (XYZ->chromaticity (temperature->XYZ 5000)) => (0.34508082841161052 0.3516084965163377) - -- Function: temperature->chromaticity x | + -- Function: temperature->chromaticity x The positive number X is a temperature in degrees kelvin. - `temperature->cromaticity' computes the chromaticity for the | - spectrum of a black body at temperature X. | + `temperature->cromaticity' computes the chromaticity for the + spectrum of a black body at temperature X. - Compute the chromaticities of 6500.K and 5000.K blackbody | - radiation: | + Compute the chromaticities of 6500.K and 5000.K blackbody + radiation: - (require 'color-space) | - (temperature->chromaticity 6500) | - => (0.3135191660557008 0.3236456786200268) | + (require 'color-space) + (temperature->chromaticity 6500) + => (0.3135191660557008 0.3236456786200268) - (temperature->chromaticity 5000) | - => (0.34508082841161052 0.3516084965163377) | + (temperature->chromaticity 5000) + => (0.34508082841161052 0.3516084965163377) - -- Function: XYZ->chromaticity xyz | + -- Function: XYZ->chromaticity xyz Returns a two element list: the x and y components of XYZ normalized to 1 (= X + Y + Z). - -- Function: chromaticity->CIEXYZ x y | + -- Function: chromaticity->CIEXYZ x y Returns the list of X, and Y, 1 - Y - X. - -- Function: chromaticity->whitepoint x y | + -- Function: chromaticity->whitepoint x y Returns the CIEXYZ(1931) values having luminosity 1 and chromaticity X and Y. @@ -7988,18 +8089,18 @@ obvious range. With no given whitepoint, the only reasonable course is to ascertain the luminance range of a dataset and normalize the values to lie from 0 to 1. - -- Function: XYZ->xyY xyz | + -- Function: XYZ->xyY xyz Returns a three element list: the X and Y components of XYZ normalized to 1, and CIE luminance Y. - -- Function: xyY->XYZ xyY | + -- Function: xyY->XYZ xyY - -- Function: xyY:normalize-colors colors | + -- Function: xyY:normalize-colors colors COLORS is a list of xyY triples. `xyY:normalize-colors' scales each chromaticity so it sums to 1 or less; and divides the Y values by the maximum Y in the dataset, so all lie between 0 and 1. - -- Function: xyY:normalize-colors colors n | + -- Function: xyY:normalize-colors colors n If N is positive real, then `xyY:normalize-colors' divides the Y values by N times the maximum Y in the dataset. @@ -8022,8 +8123,8 @@ chromaticities with sums greater than one are scaled to sum to one. File: slib.info, Node: Color Difference Metrics, Next: Color Conversions, Prev: Spectra, Up: Color -5.9.4 Color Difference Metrics | ------------------------------- | +5.9.4 Color Difference Metrics +------------------------------ `(require 'color-space)' @@ -8035,18 +8136,18 @@ lab2, lch1, or lch2. The wrapped functions operate on objects of type color, color1 and color2 in the function entries. - -- Function: L*a*b*:DE* lab1 lab2 | + -- Function: L*a*b*:DE* lab1 lab2 Returns the Euclidean distance between LAB1 and LAB2. - -- Function: CIE:DE* color1 color2 white-point | - -- Function: CIE:DE* color1 color2 | + -- Function: CIE:DE* color1 color2 white-point + -- Function: CIE:DE* color1 color2 Returns the Euclidean distance in L*a*b* space between COLOR1 and COLOR2. - -- Function: L*C*h:DE*94 lch1 lch2 parametric-factors | - -- Function: L*C*h:DE*94 lch1 lch2 | - -- Function: CIE:DE*94 color1 color2 parametric-factors | - -- Function: CIE:DE*94 color1 color2 | + -- Function: L*C*h:DE*94 lch1 lch2 parametric-factors + -- Function: L*C*h:DE*94 lch1 lch2 + -- Function: CIE:DE*94 color1 color2 parametric-factors + -- Function: CIE:DE*94 color1 color2 Measures distance in the L*C*h cylindrical color-space. The three axes are individually scaled (depending on C*) in their contributions to the total distance. @@ -8079,12 +8180,12 @@ Great Britain created a more sophisticated color-distance function for use in judging the consistency of dye lots. With CMC:DE* it is possible to use a single value pass/fail tolerance for all shades. - -- Function: CMC-DE lch1 lch2 parametric-factors | - -- Function: CMC-DE lch1 lch2 l c | - -- Function: CMC-DE lch1 lch2 l | - -- Function: CMC-DE lch1 lch2 | - -- Function: CMC:DE* color1 color2 l c | - -- Function: CMC:DE* color1 color2 | + -- Function: CMC-DE lch1 lch2 parametric-factors + -- Function: CMC-DE lch1 lch2 l c + -- Function: CMC-DE lch1 lch2 l + -- Function: CMC-DE lch1 lch2 + -- Function: CMC:DE* color1 color2 l c + -- Function: CMC:DE* color1 color2 `CMC:DE' is a L*C*h metric. The PARAMETRIC-FACTORS argument is a list of 2 numbers L and C. L and C parameterize this metric. 1 and 1 are recommended for perceptibility; the default, 2 and 1, @@ -8093,8 +8194,8 @@ to use a single value pass/fail tolerance for all shades. File: slib.info, Node: Color Conversions, Next: Color Names, Prev: Color Difference Metrics, Up: Color -5.9.5 Color Conversions | ------------------------ | +5.9.5 Color Conversions +----------------------- This package contains the low-level color conversion and color metric routines operating on lists of 3 numbers. There is no type or range @@ -8102,54 +8203,54 @@ checking. `(require 'color-space)' - -- Constant: CIEXYZ:D65 | + -- Constant: CIEXYZ:D65 Is the color of 6500.K (blackbody) illumination. D65 is close to the average color of daylight. - -- Constant: CIEXYZ:D50 | + -- Constant: CIEXYZ:D50 Is the color of 5000.K (blackbody) illumination. D50 is the color of indoor lighting by incandescent bulbs. - -- Constant: CIEXYZ:A | - -- Constant: CIEXYZ:B | - -- Constant: CIEXYZ:C | - -- Constant: CIEXYZ:E | + -- Constant: CIEXYZ:A + -- Constant: CIEXYZ:B + -- Constant: CIEXYZ:C + -- Constant: CIEXYZ:E CIE 1931 illuminants normalized to 1 = y. - -- Function: color:linear-transform matrix row | + -- Function: color:linear-transform matrix row - -- Function: CIEXYZ->RGB709 xyz | - -- Function: RGB709->CIEXYZ srgb | + -- Function: CIEXYZ->RGB709 xyz + -- Function: RGB709->CIEXYZ srgb - -- Function: CIEXYZ->L*u*v* xyz white-point | - -- Function: CIEXYZ->L*u*v* xyz | - -- Function: L*u*v*->CIEXYZ L*u*v* white-point | - -- Function: L*u*v*->CIEXYZ L*u*v* | + -- Function: CIEXYZ->L*u*v* xyz white-point + -- Function: CIEXYZ->L*u*v* xyz + -- Function: L*u*v*->CIEXYZ L*u*v* white-point + -- Function: L*u*v*->CIEXYZ L*u*v* The WHITE-POINT defaults to CIEXYZ:D65. - -- Function: CIEXYZ->L*a*b* xyz white-point | - -- Function: CIEXYZ->L*a*b* xyz | - -- Function: L*a*b*->CIEXYZ L*a*b* white-point | - -- Function: L*a*b*->CIEXYZ L*a*b* | + -- Function: CIEXYZ->L*a*b* xyz white-point + -- Function: CIEXYZ->L*a*b* xyz + -- Function: L*a*b*->CIEXYZ L*a*b* white-point + -- Function: L*a*b*->CIEXYZ L*a*b* The XYZ WHITE-POINT defaults to CIEXYZ:D65. - -- Function: L*a*b*->L*C*h L*a*b* | - -- Function: L*C*h->L*a*b* L*C*h | + -- Function: L*a*b*->L*C*h L*a*b* + -- Function: L*C*h->L*a*b* L*C*h - -- Function: CIEXYZ->sRGB xyz | - -- Function: sRGB->CIEXYZ srgb | + -- Function: CIEXYZ->sRGB xyz + -- Function: sRGB->CIEXYZ srgb - -- Function: CIEXYZ->xRGB xyz | - -- Function: xRGB->CIEXYZ srgb | + -- Function: CIEXYZ->xRGB xyz + -- Function: xRGB->CIEXYZ srgb - -- Function: sRGB->xRGB xyz | - -- Function: xRGB->sRGB srgb | + -- Function: sRGB->xRGB xyz + -- Function: xRGB->sRGB srgb - -- Function: CIEXYZ->e-sRGB n xyz | - -- Function: e-sRGB->CIEXYZ n srgb | + -- Function: CIEXYZ->e-sRGB n xyz + -- Function: e-sRGB->CIEXYZ n srgb - -- Function: sRGB->e-sRGB n srgb | - -- Function: e-sRGB->sRGB n srgb | + -- Function: sRGB->e-sRGB n srgb + -- Function: e-sRGB->sRGB n srgb The integer N must be 10, 12, or 16. Because sRGB and e-sRGB use the same RGB709 chromaticities, conversion between them is simpler than conversion through CIEXYZ. @@ -8157,15 +8258,15 @@ checking. Do not convert e-sRGB precision through `e-sRGB->sRGB' then `sRGB->e-sRGB' - values would be truncated to 8-bits! - -- Function: e-sRGB->e-sRGB n1 srgb n2 | + -- Function: e-sRGB->e-sRGB n1 srgb n2 The integers N1 and N2 must be 10, 12, or 16. `e-sRGB->e-sRGB' converts SRGB to e-sRGB of precision N2. File: slib.info, Node: Color Names, Next: Daylight, Prev: Color Conversions, Up: Color -5.9.6 Color Names | ------------------ | +5.9.6 Color Names +----------------- `(require 'color-names)' @@ -8173,7 +8274,7 @@ Rather than ballast the color dictionaries with numbered grays, `file->color-dictionary' discards them. They are provided through the `grey' procedure: - -- Function: grey k | + -- Function: grey k Returns `(inexact->exact (round (* k 2.55)))', the X11 color grey<k>. @@ -8183,37 +8284,37 @@ to color-strings (*note External Representation: Color Data-Type.). The column names in a color dictionary are unimportant; the first field is the key, and the second is the color-string. - -- Function: color-name:canonicalize name | + -- Function: color-name:canonicalize name Returns a downcased copy of the string or symbol NAME with `_', `-', and whitespace removed. - -- Function: color-name->color name table1 table2 ... | + -- Function: color-name->color name table1 table2 ... TABLE1, TABLE2, ... must be color-dictionary tables. `color-name->color' searches for the canonical form of NAME in TABLE1, TABLE2, ... in order; returning the color-string of the first matching record; #f otherwise. - -- Function: color-dictionaries->lookup table1 table2 ... | + -- Function: color-dictionaries->lookup table1 table2 ... TABLE1, TABLE2, ... must be color-dictionary tables. `color-dictionaries->lookup' returns a procedure which searches for the canonical form of its string argument in TABLE1, TABLE2, ...; returning the color-string of the first matching record; and #f otherwise. - -- Function: color-dictionary name rdb base-table-type | + -- Function: color-dictionary name rdb base-table-type RDB must be a string naming a relational database file; and the symbol NAME a table therein. The database will be opened as BASE-TABLE-TYPE. `color-dictionary' returns the read-only table NAME in database NAME if it exists; #f otherwise. - -- Function: color-dictionary name rdb | + -- Function: color-dictionary name rdb RDB must be an open relational database or a string naming a relational database file; and the symbol NAME a table therein. `color-dictionary' returns the read-only table NAME in database NAME if it exists; #f otherwise. - -- Function: load-color-dictionary name rdb base-table-type | - -- Function: load-color-dictionary name rdb | + -- Function: load-color-dictionary name rdb base-table-type + -- Function: load-color-dictionary name rdb RDB must be a string naming a relational database file; and the symbol NAME a table therein. If the symbol BASE-TABLE-TYPE is provided, the database will be opened as BASE-TABLE-TYPE. @@ -8228,8 +8329,8 @@ Dictionary Creation `(require 'color-database)' - -- Function: file->color-dictionary file table-name rdb base-table-type | - -- Function: file->color-dictionary file table-name rdb | + -- Function: file->color-dictionary file table-name rdb base-table-type + -- Function: file->color-dictionary file table-name rdb RDB must be an open relational database or a string naming a relational database file, TABLE-NAME a symbol, and the string FILE must name an existing file with colornames and their corresponding @@ -8237,8 +8338,8 @@ Dictionary Creation table TABLE-NAME in RDB and enters the associations found in FILE into it. - -- Function: url->color-dictionary url table-name rdb base-table-type | - -- Function: url->color-dictionary url table-name rdb | + -- Function: url->color-dictionary url table-name rdb base-table-type + -- Function: url->color-dictionary url table-name rdb RDB must be an open relational database or a string naming a relational database file and TABLE-NAME a symbol. `url->color-dictionary' retrieves the resource named by the string @@ -8248,28 +8349,28 @@ Dictionary Creation This section has detailed the procedures for creating and loading color dictionaries. So where are the dictionaries to load? - `http://swiss.csail.mit.edu/~jaffer/Color/Dictionaries.html' | + `http://swiss.csail.mit.edu/~jaffer/Color/Dictionaries.html' Describes and evaluates several color-name dictionaries on the web. The following procedure creates a database containing two of these dictionaries. - -- Function: make-slib-color-name-db | + -- Function: make-slib-color-name-db Creates an alist-table relational database in library-vicinity containing the "Resene" and "saturate" color-name dictionaries. - If the files `resenecolours.txt', `nbs-iscc.txt', and | - `saturate.txt' exist in the library-vicinity, then they used as | - the source of color-name data. Otherwise, | - `make-slib-color-name-db' calls url->color-dictionary with the | - URLs of appropriate source files. | + If the files `resenecolours.txt', `nbs-iscc.txt', and + `saturate.txt' exist in the library-vicinity, then they used as + the source of color-name data. Otherwise, + `make-slib-color-name-db' calls url->color-dictionary with the + URLs of appropriate source files. The Short List .............. `(require 'saturate)' - -- Function: saturate name | + -- Function: saturate name Looks for NAME among the 19 saturated colors from `Approximate Colors on CIE Chromaticity Diagram': @@ -8279,7 +8380,7 @@ The Short List purplish blue bluish purple purple reddish purple red purple purplish red red - (`http://swiss.csail.mit.edu/~jaffer/Color/saturate.pdf'). If | + (`http://swiss.csail.mit.edu/~jaffer/Color/saturate.pdf'). If NAME is found, the corresponding color is returned. Otherwise #f is returned. Use saturate only for light source colors. @@ -8289,9 +8390,9 @@ RGB Values List' available. `(require 'resene)' - -- Function: resene name | + -- Function: resene name Looks for NAME among the 1300 entries in the Resene color-name - dictionary (`http://swiss.csail.mit.edu/~jaffer/Color/resene.pdf'). | + dictionary (`http://swiss.csail.mit.edu/~jaffer/Color/resene.pdf'). If NAME is found, the corresponding color is returned. Otherwise #f is returned. The `Resene RGB Values List' is an excellent source for surface colors. @@ -8330,8 +8431,8 @@ program, then you must include its license with your program: File: slib.info, Node: Daylight, Prev: Color Names, Up: Color -5.9.7 Daylight | --------------- | +5.9.7 Daylight +-------------- `(require 'daylight)' @@ -8340,16 +8441,16 @@ This package calculates the colors of sky as detailed in: `A Practical Analytic Model for Daylight' A. J. Preetham, Peter Shirley, Brian Smits - -- Function: solar-hour julian-day hour | + -- Function: solar-hour julian-day hour Returns the solar-time in hours given the integer JULIAN-DAY in the range 1 to 366, and the local time in hours. To be meticulous, subtract 4 minutes for each degree of longitude west of the standard meridian of your time zone. - -- Function: solar-declination julian-day | + -- Function: solar-declination julian-day - -- Function: solar-polar declination latitude solar-hour | + -- Function: solar-polar declination latitude solar-hour Returns a list of THETA_S, the solar angle from the zenith, and PHI_S, the solar azimuth. 0 <= THETA_S measured in degrees. PHI_S is measured in degrees from due south; west of south being @@ -8387,20 +8488,20 @@ turbidity values less than 1.3. 1 2 4 8 16 32 64 Meterorological range (km) versus Turbidity - -- Function: sunlight-spectrum turbidity theta_s | + -- Function: sunlight-spectrum turbidity theta_s Returns a vector of 41 values, the spectrum of sunlight from 380.nm to 790.nm for a given TURBIDITY and THETA_S. - -- Function: sunlight-chromaticity turbidity theta_s | - Given TURBIDITY and THETA_S, `sunlight-chromaticity' returns the | - CIEXYZ triple for color of sunlight scaled to be just inside the | - RGB709 gamut. | + -- Function: sunlight-chromaticity turbidity theta_s + Given TURBIDITY and THETA_S, `sunlight-chromaticity' returns the + CIEXYZ triple for color of sunlight scaled to be just inside the + RGB709 gamut. - -- Function: zenith-xyy turbidity theta_s | + -- Function: zenith-xyy turbidity theta_s Returns the xyY (chromaticity and luminance) at the zenith. The Luminance has units kcd/m^2. - -- Function: overcast-sky-color-xyy turbidity theta_s | + -- Function: overcast-sky-color-xyy turbidity theta_s TURBIDITY is a positive real number expressing the amount of light scattering. The real number THETA_S is the solar angle from the zenith in degrees. @@ -8410,8 +8511,8 @@ turbidity values less than 1.3. and returning the xyY value for light coming from that elevation of the sky. - -- Function: clear-sky-color-xyy turbidity theta_s phi_s | - -- Function: sky-color-xyy turbidity theta_s phi_s | + -- Function: clear-sky-color-xyy turbidity theta_s phi_s + -- Function: sky-color-xyy turbidity theta_s phi_s TURBIDITY is a positive real number expressing the amount of light scattering. The real number THETA_S is the solar angle from the zenith in degrees. The real number PHI_S is the solar angle from @@ -8428,19 +8529,23 @@ turbidity values less than 1.3. File: slib.info, Node: Root Finding, Next: Minimizing, Prev: Color, Up: Mathematical Packages -5.10 Root Finding | -================= | +5.10 Root Finding +================= `(require 'root)' - -- Function: newton:find-integer-root f df/dx x0 | + -- Function: integer-sqrt y | + Given a non-negative integer Y, returns the largest integer whose | + square is less than or equal to Y. | + | + -- Function: newton:find-integer-root f df/dx x0 Given integer valued procedure F, its derivative (with respect to its argument) DF/DX, and initial integer value X0 for which DF/DX(X0) is non-zero, returns an integer X for which F(X) is closer to zero than either of the integers adjacent to X; or returns `#f' if such an integer can't be found. - To find the closest integer to a given integer's square root: | + To find the closest integer to a given integer's square root: (define (integer-sqrt y) (newton:find-integer-root @@ -8449,12 +8554,8 @@ File: slib.info, Node: Root Finding, Next: Minimizing, Prev: Color, Up: Math (ash 1 (quotient (integer-length y) 2)))) (integer-sqrt 15) => 4 - - -- Function: integer-sqrt y | - Given a non-negative integer Y, returns the rounded square-root of - Y. - - -- Function: newton:find-root f df/dx x0 prec | + | + -- Function: newton:find-root f df/dx x0 prec Given real valued procedures F, DF/DX of one (real) argument, initial real value X0 for which DF/DX(X0) is non-zero, and positive real number PREC, returns a real X for which `abs'(F(X)) @@ -8471,7 +8572,7 @@ Polynomials', IEEE Transactions on Circuits and Systems, Vol. 36, No. value of 1000+j0 should have Z_k of 1.0475 + j4.1036 and line k=2 for starting value of 0+j1000 should have Z_k of 1.0988 + j4.0833. - -- Function: laguerre:find-root f df/dz ddf/dz^2 z0 prec | + -- Function: laguerre:find-root f df/dz ddf/dz^2 z0 prec Given complex valued procedure F of one (complex) argument, its derivative (with respect to its argument) DF/DX, its second derivative DDF/DZ^2, initial complex value Z0, and positive real @@ -8482,7 +8583,7 @@ Polynomials', IEEE Transactions on Circuits and Systems, Vol. 36, No. If PREC is instead a negative integer, `laguerre:find-root' returns the result of -PREC iterations. - -- Function: laguerre:find-polynomial-root deg f df/dz ddf/dz^2 z0 prec | + -- Function: laguerre:find-polynomial-root deg f df/dz ddf/dz^2 z0 prec Given polynomial procedure F of integer degree DEG of one argument, its derivative (with respect to its argument) DF/DX, its second derivative DDF/DZ^2, initial complex value Z0, and positive @@ -8494,8 +8595,8 @@ Polynomials', IEEE Transactions on Circuits and Systems, Vol. 36, No. `laguerre:find-polynomial-root' returns the result of -PREC iterations. - -- Function: secant:find-root f x0 x1 prec | - -- Function: secant:find-bracketed-root f x0 x1 prec | + -- Function: secant:find-root f x0 x1 prec + -- Function: secant:find-bracketed-root f x0 x1 prec Given a real valued procedure F and two real valued starting points X0 and X1, returns a real X for which `(abs (f x))' is less than PREC; or returns `#f' if such a real can't be found. @@ -8521,10 +8622,10 @@ Polynomials', IEEE Transactions on Circuits and Systems, Vol. 36, No. non-false if the iteration should be stopped. -File: slib.info, Node: Minimizing, Next: Commutative Rings, Prev: Root Finding, Up: Mathematical Packages - -5.11 Minimizing | -=============== | +File: slib.info, Node: Minimizing, Next: The Limit, Prev: Root Finding, Up: Mathematical Packages + | +5.11 Minimizing +=============== `(require 'minimize)' @@ -8537,7 +8638,7 @@ If the derivative is available, Newton-Raphson is probably a better choice. If the function is inexpensive to compute, consider approximating the derivative. - -- Function: golden-section-search f x0 x1 prec | + -- Function: golden-section-search f x0 x1 prec X_0 are X_1 real numbers. The (single argument) procedure F is unimodal over the open interval (X_0, X_1). That is, there is exactly one point in the interval for which the derivative of F is @@ -8568,10 +8669,110 @@ approximating the derivative. and Software' Prentice-Hall, 1989, ISBN 0-13-627258-4 -File: slib.info, Node: Commutative Rings, Next: Matrix Algebra, Prev: Minimizing, Up: Mathematical Packages - -5.12 Commutative Rings | -====================== | +File: slib.info, Node: The Limit, Next: Commutative Rings, Prev: Minimizing, Up: Mathematical Packages + | +5.12 The Limit | +============== | + | + -- library procedure: limit proc x1 x2 k | + -- library procedure: limit proc x1 x2 | + PROC must be a procedure taking a single inexact real argument. K | + is the number of points on which PROC will be called; it defaults | + to 8. | + | + If X1 is finite, then PROC must be continuous on the half-open | + interval: | + | + ( X1 .. X1+X2 ] | + | + And X2 should be chosen small enough so that PROC is expected to | + be monotonic or constant on arguments between X1 and X1 + X2. | + | + `Limit' computes the limit of PROC as its argument approaches X1 | + from X1 + X2. `Limit' returns a real number or real infinity or | + `#f'. | + | + If X1 is not finite, then X2 must be a finite nonzero real with | + the same sign as X1; in which case `limit' returns: | + | + `(limit (lambda (x) (proc (/ x))) 0.0 (/ X2) K)' | + | + `Limit' examines the magnitudes of the differences between | + successive values returned by PROC called with a succession of | + numbers from X1+X2/K to X1. | + | + If the magnitudes of differences are monotonically decreasing, then | + then the limit is extrapolated from the degree n polynomial passing | + through the samples returned by PROC. | + | + If the magnitudes of differences are increasing as fast or faster | + than a hyperbola matching at X1+X2, then a real infinity with sign | + the same as the differences is returned. | + | + If the magnitudes of differences are increasing more slowly than | + the hyperbola matching at X1+X2, then the limit is extrapolated | + from the quadratic passing through the three samples closest to X1. | + | + If the magnitudes of differences are not monotonic or are not | + completely within one of the above categories, then #f is returned. | + | + ;; constant | + (limit (lambda (x) (/ x x)) 0 1.0e-9) ==> 1.0 | + (limit (lambda (x) (expt 0 x)) 0 1.0e-9) ==> 0.0 | + (limit (lambda (x) (expt 0 x)) 0 -1.0e-9) ==> +inf.0 | + ;; linear | + (limit + 0 976.5625e-6) ==> 0.0 | + (limit - 0 976.5625e-6) ==> 0.0 | + ;; vertical point of inflection | + (limit sqrt 0 1.0e-18) ==> 0.0 | + (limit (lambda (x) (* x (log x))) 0 1.0e-9) ==> -102.70578127633066e-12 + (limit (lambda (x) (/ x (log x))) 0 1.0e-9) ==> 96.12123142321669e-15 + ;; limits tending to infinity | + (limit + +inf.0 1.0e9) ==> +inf.0 | + (limit + -inf.0 -1.0e9) ==> -inf.0 | + (limit / 0 1.0e-9) ==> +inf.0 | + (limit / 0 -1.0e-9) ==> -inf.0 | + (limit (lambda (x) (/ (log x) x)) 0 1.0e-9) ==> -inf.0 | + (limit (lambda (x) (/ (magnitude (log x)) x)) 0 -1.0e-9) | + ==> -inf.0 | + ;; limit doesn't exist | + (limit sin +inf.0 1.0e9) ==> #f | + (limit (lambda (x) (sin (/ x))) 0 1.0e-9) ==> #f | + (limit (lambda (x) (sin (/ x))) 0 -1.0e-9) ==> #f | + (limit (lambda (x) (/ (log x) x)) 0 -1.0e-9) ==> #f | + ;; conditionally convergent - return #f | + (limit (lambda (x) (/ (sin x) x)) +inf.0 1.0e222) | + ==> #f | + ;; asymptotes | + (limit / -inf.0 -1.0e222) ==> 0.0 | + (limit / +inf.0 1.0e222) ==> 0.0 | + (limit (lambda (x) (expt x x)) 0 1.0e-18) ==> 1.0 | + (limit (lambda (x) (sin (/ x))) +inf.0 1.0e222) ==> 0.0 | + (limit (lambda (x) (/ (+ (exp (/ x)) 1))) 0 1.0e-9) | + ==> 0.0 | + (limit (lambda (x) (/ (+ (exp (/ x)) 1))) 0 -1.0e-9) | + ==> 1.0 | + (limit (lambda (x) (real-part (expt (tan x) (cos x)))) (/ pi 2) 1.0e-9) | + ==> 1.0 | + ;; This example from the 1979 Macsyma manual grows so rapidly | + ;; that x2 must be less than 41. It correctly returns e^2. | + (limit (lambda (x) (expt (+ x (exp x) (exp (* 2 x))) (/ x))) +inf.0 40) | + ==> 7.3890560989306504 | + ;; LIMIT can calculate the proper answer when evaluation | + ;; of the function at the limit point does not: | + (tan (atan +inf.0)) ==> 16.331778728383844e15 + (limit tan (atan +inf.0) -1.0e-15) ==> +inf.0 | + (tan (atan +inf.0)) ==> 16.331778728383844e15 + (limit tan (atan +inf.0) 1.0e-15) ==> -inf.0 | + ((lambda (x) (expt (exp (/ -1 x)) x)) 0) ==> 1.0 | + (limit (lambda (x) (expt (exp (/ -1 x)) x)) 0 1.0e-9) | + ==> 0.0 | + | + +File: slib.info, Node: Commutative Rings, Next: Matrix Algebra, Prev: The Limit, Up: Mathematical Packages + | +5.13 Commutative Rings | +====================== Scheme provides a consistent and capable set of numeric functions. Inexacts implement a field; integers a commutative ring (and Euclidean @@ -8636,28 +8837,28 @@ expressions are handled similarly. `remainder', `lcm', and `gcd'; but these work only for the more restrictive Euclidean (Unique Factorization) Domain. -5.13 Rules and Rulesets | -======================= | +5.14 Rules and Rulesets | +======================= The "commutative-ring" package allows control of ring properties through the use of "rulesets". - -- Variable: *ruleset* | + -- Variable: *ruleset* Contains the set of rules currently in effect. Rules defined by `cring:define-rule' are stored within the value of *ruleset* at the time `cring:define-rule' is called. If *RULESET* is `#f', then no rules apply. - -- Function: make-ruleset rule1 ... | - -- Function: make-ruleset name rule1 ... | + -- Function: make-ruleset rule1 ... + -- Function: make-ruleset name rule1 ... Returns a new ruleset containing the rules formed by applying `cring:define-rule' to each 4-element list argument RULE. If the first argument to `make-ruleset' is a symbol, then the database table created for the new ruleset will be named NAME. Calling `make-ruleset' with no rule arguments creates an empty ruleset. - -- Function: combined-rulesets ruleset1 ... | - -- Function: combined-rulesets name ruleset1 ... | + -- Function: combined-rulesets ruleset1 ... + -- Function: combined-rulesets name ruleset1 ... Returns a new ruleset containing the rules contained in each ruleset argument RULESET. If the first argument to `combined-ruleset' is a symbol, then the database table created for @@ -8666,11 +8867,11 @@ through the use of "rulesets". Two rulesets are defined by this package. - -- Constant: distribute* | + -- Constant: distribute* Contains the ruleset to distribute multiplication over addition and subtraction. - -- Constant: distribute/ | + -- Constant: distribute/ Contains the ruleset to distribute division over addition and subtraction. @@ -8682,14 +8883,14 @@ elements simplify by specifying the rules for `+' or `*' for cases where expressions involving objects reduce to numbers or to expressions involving different non-numeric elements. - -- Function: cring:define-rule op sub-op1 sub-op2 reduction | + -- Function: cring:define-rule op sub-op1 sub-op2 reduction Defines a rule for the case when the operation represented by symbol OP is applied to lists whose `car's are SUB-OP1 and SUB-OP2, respectively. The argument REDUCTION is a procedure accepting 2 arguments which will be lists whose `car's are SUB-OP1 and SUB-OP2. - -- Function: cring:define-rule op sub-op1 'identity reduction | + -- Function: cring:define-rule op sub-op1 'identity reduction Defines a rule for the case when the operation represented by symbol OP is applied to a list whose `car' is SUB-OP1, and some other argument. REDUCTION will be called with the list whose @@ -8710,8 +8911,8 @@ involving different non-numeric elements. (lambda (exp1 exp2) (apply + (map (lambda (trm) (* trm exp2)) (cdr exp1)))))) -5.14 How to Create a Commutative Ring | -===================================== | +5.15 How to Create a Commutative Ring | +===================================== The first step in creating your commutative ring is to write procedures to create elements of the ring. A non-numeric element of the ring must @@ -8849,21 +9050,21 @@ objects. File: slib.info, Node: Matrix Algebra, Prev: Commutative Rings, Up: Mathematical Packages -5.15 Matrix Algebra | -=================== | +5.16 Matrix Algebra | +=================== `(require 'determinant)' -A Matrix can be either a list of lists (rows) or an array. Unlike | -linear-algebra texts, this package uses 0-based coordinates. | +A Matrix can be either a list of lists (rows) or an array. Unlike +linear-algebra texts, this package uses 0-based coordinates. - -- Function: matrix->lists matrix | + -- Function: matrix->lists matrix Returns the list-of-lists form of MATRIX. - -- Function: matrix->array matrix | + -- Function: matrix->array matrix Returns the (ones-based) array form of MATRIX. - -- Function: determinant matrix | + -- Function: determinant matrix MATRIX must be a square matrix. `determinant' returns the determinant of MATRIX. @@ -8871,14 +9072,14 @@ linear-algebra texts, this package uses 0-based coordinates. | (determinant '((1 2) (3 4))) => -2 (determinant '((1 2 3) (4 5 6) (7 8 9))) => 0 - -- Function: transpose matrix | + -- Function: transpose matrix Returns a copy of MATRIX flipped over the diagonal containing the 1,1 element. - -- Function: matrix:product m1 m2 | + -- Function: matrix:product m1 m2 Returns the product of matrices M1 and M2. - -- Function: matrix:inverse matrix | + -- Function: matrix:inverse matrix MATRIX must be a square matrix. If MATRIX is singlar, then `matrix:inverse' returns #f; otherwise `matrix:inverse' returns the `matrix:product' inverse of MATRIX. @@ -8886,8 +9087,8 @@ linear-algebra texts, this package uses 0-based coordinates. | File: slib.info, Node: Database Packages, Next: Other Packages, Prev: Mathematical Packages, Up: Top -6 Database Packages | -******************* | +6 Database Packages +******************* * Menu: @@ -8898,8 +9099,8 @@ File: slib.info, Node: Database Packages, Next: Other Packages, Prev: Mathema File: slib.info, Node: Relational Database, Next: Relational Infrastructure, Prev: Database Packages, Up: Database Packages -6.1 Relational Database | -======================= | +6.1 Relational Database +======================= `(require 'relational-database)' @@ -8909,7 +9110,7 @@ Banks'). An SLIB relational database implementation can be created from any *Note Base Table:: implementation. Why relational database? For motivations and design issues see -`http://swiss.csail.mit.edu/~jaffer/DBManifesto.html'. | +`http://swiss.csail.mit.edu/~jaffer/DBManifesto.html'. * Menu: @@ -8923,8 +9124,8 @@ from any *Note Base Table:: implementation. File: slib.info, Node: Using Databases, Next: Table Operations, Prev: Relational Database, Up: Relational Database -6.1.1 Using Databases | ---------------------- | +6.1.1 Using Databases +--------------------- `(require 'databases)' @@ -8962,7 +9163,7 @@ Database Operations::. Except for `create-database', each procedure will accept either a filename or database procedure for its first argument. - -- Function: create-database filename base-table-type | + -- Function: create-database filename base-table-type FILENAME should be a string naming a file; or `#f'. BASE-TABLE-TYPE must be a symbol naming a feature which can be passed to `require'. `create-database' returns a new, open @@ -8987,33 +9188,33 @@ Therefore, either pass two arguments to `open-database', or require the base-table of your database file uses before calling `open-database' with one argument. - -- Procedure: open-database! rdb base-table-type | + -- Procedure: open-database! rdb base-table-type Returns _mutable_ open relational database or #f. - -- Function: open-database rdb base-table-type | + -- Function: open-database rdb base-table-type Returns an open relational database associated with RDB. The database will be opened with base-table type BASE-TABLE-TYPE). - -- Function: open-database rdb | + -- Function: open-database rdb Returns an open relational database associated with RDB. `open-database' will attempt to deduce the correct base-table-type. - -- Function: write-database rdb filename | + -- Function: write-database rdb filename Writes the mutable relational-database RDB to FILENAME. - -- Function: sync-database rdb | + -- Function: sync-database rdb Writes the mutable relational-database RDB to the filename it was opened with. - -- Function: solidify-database rdb | + -- Function: solidify-database rdb Syncs RDB and makes it immutable. - -- Function: close-database rdb | + -- Function: close-database rdb RDB will only be closed when the count of `open-database' - `close-database' calls for RDB (and its filename) is 0. `close-database' returns #t if successful; and #f otherwise. - -- Function: mdbm:report | + -- Function: mdbm:report Prints a table of open database files. The columns are the base-table type, number of opens, `!' for mutable, the filename, and the lock certificate (if locked). @@ -9026,14 +9227,14 @@ with one argument. Opening Tables .............. - -- Function: open-table rdb table-name | + -- Function: open-table rdb table-name RDB must be a relational database and TABLE-NAME a symbol. `open-table' returns a "methods" procedure for an existing relational table in RDB if it exists and can be opened for reading, otherwise returns `#f'. - -- Procedure: open-table! rdb table-name | + -- Procedure: open-table! rdb table-name RDB must be a relational database and TABLE-NAME a symbol. `open-table!' returns a "methods" procedure for an existing @@ -9043,17 +9244,17 @@ Opening Tables Defining Tables ............... - -- Function: define-domains rdb row5 ... | + -- Function: define-domains rdb row5 ... Adds the domain rows ROW5 ... to the `*domains-data*' table in RDB. The format of the row is given in *Note Catalog Representation::. (define-domains rdb '(permittivity #f complex? c64 #f)) - -- Function: add-domain rdb row5 | + -- Function: add-domain rdb row5 Use `define-domains' instead. - -- Function: define-tables rdb spec-0 ... | + -- Function: define-tables rdb spec-0 ... Adds tables as specified in SPEC-0 ... to the open relational-database RDB. Each SPEC has the form: @@ -9086,7 +9287,7 @@ Defining Tables Listing Tables .............. - -- Function: list-table-definition rdb table-name | + -- Function: list-table-definition rdb table-name If symbol TABLE-NAME exists in the open relational-database RDB, then returns a list of the table-name, its primary key names and domains, its other key names and domains, and the table's records @@ -9098,8 +9299,8 @@ Listing Tables File: slib.info, Node: Table Operations, Next: Database Interpolation, Prev: Using Databases, Up: Relational Database -6.1.2 Table Operations | ----------------------- | +6.1.2 Table Operations +---------------------- These are the descriptions of the methods available from an open relational table. A method is retrieved from a table by calling the @@ -9112,7 +9313,7 @@ keys arguments are denoted KEY1 KEY2 .... It is an error to call an operation for a table which takes primary key arguments with the wrong number of primary keys for that table. - -- Operation on relational-table: get column-name | + -- Operation on relational-table: get column-name Returns a procedure of arguments KEY1 KEY2 ... which returns the value for the COLUMN-NAME column of the row associated with primary keys KEY1, KEY2 ... if that row exists in the table, or @@ -9133,15 +9334,15 @@ number of primary keys for that table. File: slib.info, Node: Single Row Operations, Next: Match-Keys, Prev: Table Operations, Up: Table Operations -6.1.2.1 Single Row Operations | -............................. | +6.1.2.1 Single Row Operations +............................. The term "row" used below refers to a Scheme list of values (one for each column) in the order specified in the descriptor (table) for this table. Missing values appear as `#f'. Primary keys must not be missing. - -- Operation on relational-table: row:insert | + -- Operation on relational-table: row:insert Adds the row ROW to this table. If a row for the primary key(s) specified by ROW already exists in this table an error is signaled. The value returned is unspecified. @@ -9160,13 +9361,13 @@ missing. (string->list d)))) string)) - -- Operation on relational-table: row:update | + -- Operation on relational-table: row:update Returns a procedure of one argument, ROW, which adds the row, ROW, to this table. If a row for the primary key(s) specified by ROW already exists in this table, it will be overwritten. The value returned is unspecified. - -- Operation on relational-table: row:retrieve | + -- Operation on relational-table: row:retrieve Returns a procedure of arguments KEY1 KEY2 ... which returns the row associated with primary keys KEY1, KEY2 ... if it exists, or `#f' otherwise. @@ -9174,12 +9375,12 @@ missing. ((plat 'row:retrieve) 'linux) => (linux i386 linux gcc) ((plat 'row:retrieve) 'multics) => #f - -- Operation on relational-table: row:remove | + -- Operation on relational-table: row:remove Returns a procedure of arguments KEY1 KEY2 ... which removes and returns the row associated with primary keys KEY1, KEY2 ... if it exists, or `#f' otherwise. - -- Operation on relational-table: row:delete | + -- Operation on relational-table: row:delete Returns a procedure of arguments KEY1 KEY2 ... which deletes the row associated with primary keys KEY1, KEY2 ... if it exists. The value returned is unspecified. @@ -9187,8 +9388,8 @@ missing. File: slib.info, Node: Match-Keys, Next: Multi-Row Operations, Prev: Single Row Operations, Up: Table Operations -6.1.2.2 Match-Keys | -.................. | +6.1.2.2 Match-Keys +.................. The (optional) MATCH-KEY1 ... arguments are used to restrict actions of a whole-table operation to a subset of that table. Those procedures @@ -9212,7 +9413,7 @@ argument. The arguments and their actions are: other values Any other value matches only those keys `equal?' to it. - -- Operation on relational-table: get* column-name | + -- Operation on relational-table: get* column-name Returns a procedure of optional arguments MATCH-KEY1 ... which returns a list of the values for the specified column for all rows in this table. The optional MATCH-KEY1 ... arguments restrict @@ -9239,10 +9440,10 @@ argument. The arguments and their actions are: File: slib.info, Node: Multi-Row Operations, Next: Indexed Sequential Access Methods, Prev: Match-Keys, Up: Table Operations -6.1.2.3 Multi-Row Operations | -............................ | +6.1.2.3 Multi-Row Operations +............................ - -- Operation on relational-table: row:retrieve* | + -- Operation on relational-table: row:retrieve* Returns a procedure of optional arguments MATCH-KEY1 ... which returns a list of all rows in this table. The optional MATCH-KEY1 ... arguments restrict actions to a subset of the table. For @@ -9256,19 +9457,19 @@ File: slib.info, Node: Multi-Row Operations, Next: Indexed Sequential Access M (amiga-dice-c m68000 amiga dice-c) (aix powerpc aix -)) - -- Operation on relational-table: row:remove* | + -- Operation on relational-table: row:remove* Returns a procedure of optional arguments MATCH-KEY1 ... which removes and returns a list of all rows in this table. The optional MATCH-KEY1 ... arguments restrict actions to a subset of the table. - -- Operation on relational-table: row:delete* | + -- Operation on relational-table: row:delete* Returns a procedure of optional arguments MATCH-KEY1 ... which Deletes all rows from this table. The optional MATCH-KEY1 ... arguments restrict deletions to a subset of the table. The value returned is unspecified. The descriptor table and catalog entry for this table are not affected. - -- Operation on relational-table: for-each-row | + -- Operation on relational-table: for-each-row Returns a procedure of arguments PROC MATCH-KEY1 ... which calls PROC with each ROW in this table. The optional MATCH-KEY1 ... arguments restrict actions to a subset of the table. For details @@ -9276,13 +9477,13 @@ File: slib.info, Node: Multi-Row Operations, Next: Indexed Sequential Access M Note that `row:insert*' and `row:update*' do _not_ use match-keys. - -- Operation on relational-table: row:insert* | + -- Operation on relational-table: row:insert* Returns a procedure of one argument, ROWS, which adds each row in the list of rows, ROWS, to this table. If a row for the primary key specified by an element of ROWS already exists in this table, an error is signaled. The value returned is unspecified. - -- Operation on relational-table: row:update* | + -- Operation on relational-table: row:update* Returns a procedure of one argument, ROWS, which adds each row in the list of rows, ROWS, to this table. If a row for the primary key specified by an element of ROWS already exists in this table, @@ -9291,8 +9492,8 @@ Note that `row:insert*' and `row:update*' do _not_ use match-keys. File: slib.info, Node: Indexed Sequential Access Methods, Next: Sequential Index Operations, Prev: Multi-Row Operations, Up: Table Operations -6.1.2.4 Indexed Sequential Access Methods | -......................................... | +6.1.2.4 Indexed Sequential Access Methods +......................................... "Indexed Sequential Access Methods" are a way of arranging database information so that records can be accessed both by key and by key @@ -9315,38 +9516,38 @@ order. For example: File: slib.info, Node: Sequential Index Operations, Next: Table Administration, Prev: Indexed Sequential Access Methods, Up: Table Operations -6.1.2.5 Sequential Index Operations | -................................... | +6.1.2.5 Sequential Index Operations +................................... The following procedures are individually optional depending on the base-table implememtation. If an operation is _not_ supported, then calling the table with that operation symbol will return false. - -- Operation on relational-table: for-each-row-in-order | + -- Operation on relational-table: for-each-row-in-order Returns a procedure of arguments PROC MATCH-KEY1 ... which calls PROC with each ROW in this table in the (implementation-dependent) natural, repeatable ordering for rows. The optional MATCH-KEY1 ... arguments restrict actions to a subset of the table. For details see *Note Match-Keys::. - -- Operation on relational-table: isam-next | + -- Operation on relational-table: isam-next Returns a procedure of arguments KEY1 KEY2 ... which returns the key-list identifying the lowest record higher than KEY1 KEY2 ... which is stored in the relational-table; or false if no higher record is present. - -- Operation on relational-table: isam-next column-name | + -- Operation on relational-table: isam-next column-name The symbol COLUMN-NAME names a key field. In the list returned by `isam-next', that field, or a field to its left, will be changed. This allows one to skip over less significant key fields. - -- Operation on relational-table: isam-prev | + -- Operation on relational-table: isam-prev Returns a procedure of arguments KEY1 KEY2 ... which returns the key-list identifying the highest record less than KEY1 KEY2 ... which is stored in the relational-table; or false if no lower record is present. - -- Operation on relational-table: isam-prev column-name | + -- Operation on relational-table: isam-prev column-name The symbol COLUMN-NAME names a key field. In the list returned by `isam-next', that field, or a field to its left, will be changed. This allows one to skip over less significant key fields. @@ -9372,30 +9573,30 @@ calling the table with that operation symbol will return false. File: slib.info, Node: Table Administration, Prev: Sequential Index Operations, Up: Table Operations -6.1.2.6 Table Administration | -............................ | +6.1.2.6 Table Administration +............................ - -- Operation on relational-table: column-names | - -- Operation on relational-table: column-foreigns | - -- Operation on relational-table: column-domains | - -- Operation on relational-table: column-types | + -- Operation on relational-table: column-names + -- Operation on relational-table: column-foreigns + -- Operation on relational-table: column-domains + -- Operation on relational-table: column-types Return a list of the column names, foreign-key table names, domain names, or type names respectively for this table. These 4 methods are different from the others in that the list is returned, rather than a procedure to obtain the list. - -- Operation on relational-table: primary-limit | + -- Operation on relational-table: primary-limit Returns the number of primary keys fields in the relations in this table. - -- Operation on relational-table: close-table | + -- Operation on relational-table: close-table Subsequent operations to this table will signal an error. File: slib.info, Node: Database Interpolation, Next: Embedded Commands, Prev: Table Operations, Up: Relational Database -6.1.3 Database Interpolation | ----------------------------- | +6.1.3 Database Interpolation +---------------------------- `(require 'database-interpolate)' @@ -9403,7 +9604,7 @@ Indexed sequential access methods allow finding the keys (having associations) closest to a given value. This facilitates the interpolation of associations between those in the table. - -- Function: interpolate-from-table table column | + -- Function: interpolate-from-table table column TABLE should be a relational table with one numeric primary key field which supports the `isam-prev' and `isam-next' operations. COLUMN should be a symbol or exact positive integer designating a @@ -9419,8 +9620,8 @@ interpolation of associations between those in the table. File: slib.info, Node: Embedded Commands, Next: Database Macros, Prev: Database Interpolation, Up: Relational Database -6.1.4 Embedded Commands | ------------------------ | +6.1.4 Embedded Commands +----------------------- `(require 'database-commands)' @@ -9463,19 +9664,19 @@ code in the `*commands*' table. File: slib.info, Node: Database Extension, Next: Command Intrinsics, Prev: Embedded Commands, Up: Embedded Commands -6.1.4.1 Database Extension | -.......................... | +6.1.4.1 Database Extension +.......................... - -- Function: wrap-command-interface rdb | + -- Function: wrap-command-interface rdb Returns relational database RDB wrapped with additional commands defined in its *commands* table. - -- Function: add-command-tables rdb | + -- Function: add-command-tables rdb The relational database RDB must be mutable. ADD-COMMAND-TABLES adds a *command* table to RDB; then returns `(wrap-command-interface RDB)'. - -- Function: define-*commands* rdb spec-0 ... | + -- Function: define-*commands* rdb spec-0 ... Adds commands to the `*commands*' table as specified in SPEC-0 ... to the open relational-database RDB. Each SPEC has the form: @@ -9493,8 +9694,8 @@ File: slib.info, Node: Database Extension, Next: Command Intrinsics, Prev: Em (lambda (<name> <rdb>) <expression1> <expression2> ...) - -- Function: open-command-database filename | - -- Function: open-command-database filename base-table-type | + -- Function: open-command-database filename + -- Function: open-command-database filename base-table-type Returns an open enhanced relational database associated with FILENAME. The database will be opened with base-table type BASE-TABLE-TYPE) if supplied. If BASE-TABLE-TYPE is not supplied, @@ -9502,28 +9703,28 @@ File: slib.info, Node: Database Extension, Next: Command Intrinsics, Prev: Em base-table-type. If the database can not be opened or if it lacks the `*commands*' table, `#f' is returned. - -- Function: open-command-database! filename | - -- Function: open-command-database! filename base-table-type | + -- Function: open-command-database! filename + -- Function: open-command-database! filename base-table-type Returns _mutable_ open enhanced relational database ... - -- Function: open-command-database database | + -- Function: open-command-database database Returns DATABASE if it is an immutable relational database; #f otherwise. - -- Function: open-command-database! database | + -- Function: open-command-database! database Returns DATABASE if it is a mutable relational database; #f otherwise. File: slib.info, Node: Command Intrinsics, Next: Define-tables Example, Prev: Database Extension, Up: Embedded Commands -6.1.4.2 Command Intrinsics | -.......................... | +6.1.4.2 Command Intrinsics +.......................... Some commands are defined in all extended relational-databases. The are called just like *Note Database Operations::. - -- Operation on relational-database: add-domain domain-row | + -- Operation on relational-database: add-domain domain-row Adds DOMAIN-ROW to the "domains" table if there is no row in the domains table associated with key `(car DOMAIN-ROW)' and returns `#t'. Otherwise returns `#f'. @@ -9552,18 +9753,18 @@ called just like *Note Database Operations::. (filename #f #f string #f) (build-whats #f #f symbol #f))) - -- Operation on relational-database: delete-domain domain-name | + -- Operation on relational-database: delete-domain domain-name Removes and returns the DOMAIN-NAME row from the "domains" table. - -- Operation on relational-database: domain-checker domain | + -- Operation on relational-database: domain-checker domain Returns a procedure to check an argument for conformance to domain DOMAIN. File: slib.info, Node: Define-tables Example, Next: The *commands* Table, Prev: Command Intrinsics, Up: Embedded Commands -6.1.4.3 Define-tables Example | -............................. | +6.1.4.3 Define-tables Example +............................. The following example shows a new database with the name of `foo.db' being created with tables describing processor families and @@ -9606,8 +9807,8 @@ saved and changed to immutable. File: slib.info, Node: The *commands* Table, Next: Command Service, Prev: Define-tables Example, Up: Embedded Commands -6.1.4.4 The *commands* Table | -............................ | +6.1.4.4 The *commands* Table +............................ The table `*commands*' in an "enhanced" relational-database has the fields (with domains): @@ -9668,10 +9869,10 @@ shared state with the domain-integrity-rule. File: slib.info, Node: Command Service, Next: Command Example, Prev: The *commands* Table, Up: Embedded Commands -6.1.4.5 Command Service | -....................... | +6.1.4.5 Command Service +....................... - -- Function: make-command-server rdb table-name | + -- Function: make-command-server rdb table-name Returns a procedure of 2 arguments, a (symbol) command and a call-back procedure. When this returned procedure is called, it looks up COMMAND in table TABLE-NAME and calls the call-back @@ -9721,8 +9922,8 @@ For information about parameters, *Note Parameter lists::. File: slib.info, Node: Command Example, Prev: Command Service, Up: Embedded Commands -6.1.4.6 Command Example | -....................... | +6.1.4.6 Command Example +....................... Here is an example of setting up a command with arguments and parsing those arguments from a `getopt' style argument list (*note Getopt::). @@ -9833,8 +10034,8 @@ those arguments from a `getopt' style argument list (*note Getopt::). File: slib.info, Node: Database Macros, Next: Database Browser, Prev: Embedded Commands, Up: Relational Database -6.1.5 Database Macros | ---------------------- | +6.1.5 Database Macros +--------------------- `(require 'within-database)' @@ -9855,36 +10056,36 @@ emacs: * Menu: -* Within-database:: | +* Within-database:: * Within-database Example:: File: slib.info, Node: Within-database, Next: Within-database Example, Prev: Database Macros, Up: Database Macros - | -6.1.5.1 Within-database | -....................... | - | - -- Function: within-database database statement-1 ... | + +6.1.5.1 Within-database +....................... + + -- Function: within-database database statement-1 ... `within-database' creates a lexical scope in which the commands `define-table' and `define-command' create tables and `*commands*'-table entries respectively in open relational - database DATABASE. The expressions in `within-database' form are | - executed in order. | + database DATABASE. The expressions in `within-database' form are + executed in order. `within-database' Returns DATABASE. - -- Syntax: define-command (<name> <rdb>) "comment" <expression1> | + -- Syntax: define-command (<name> <rdb>) "comment" <expression1> <expression2> ... - -- Syntax: define-command (<name> <rdb>) <expression1> <expression2> | - ... | + -- Syntax: define-command (<name> <rdb>) <expression1> <expression2> + ... Adds to the `*commands*' table a command <name>: (lambda (<name> <rdb>) <expression1> <expression2> ...) - -- Syntax: define-table <name> <descriptor-name> <descriptor-name> | + -- Syntax: define-table <name> <descriptor-name> <descriptor-name> <rows> - -- Syntax: define-table <name> <primary-key-fields> <other-fields> | + -- Syntax: define-table <name> <primary-key-fields> <other-fields> <rows> where <name> is the table name, <descriptor-name> is the symbol name of a descriptor table, <primary-key-fields> and @@ -9909,38 +10110,38 @@ File: slib.info, Node: Within-database, Next: Within-database Example, Prev: field table, a foreign-key domain will be created for it. - -- Function: add-macro-support database | - The relational database DATABASE must be mutable. | - `add-macro-support' adds a `*macros*' table and `define-macro' | - macro to DATABASE; then DATABASE is returned. | - | - -- Syntax: define-macro (<name> arg1 ...) "comment" <expression1> | - <expression2> ... | - -- Syntax: define-macro (<name> arg1 ...) <expression1> <expression2> | - ... | - Adds a macro <name> to the `*macros*'. | - | - _Note:_ `within-database' creates lexical scope where not only | - `define-command' and `define-table', but every command and macro | - are defined, ie.: | - | - (within-database my-rdb | - (define-command (message rdb) | - (lambda (msg) | - (display "message: ") | - (display msg) | - (newline))) | - (message "Defining FOO...") | - ;; ... defining FOO ... | - (message "Defining BAR...") | - ;; ... defining BAR ... | - ) | - | + -- Function: add-macro-support database + The relational database DATABASE must be mutable. + `add-macro-support' adds a `*macros*' table and `define-macro' + macro to DATABASE; then DATABASE is returned. + + -- Syntax: define-macro (<name> arg1 ...) "comment" <expression1> + <expression2> ... + -- Syntax: define-macro (<name> arg1 ...) <expression1> <expression2> + ... + Adds a macro <name> to the `*macros*'. + + _Note:_ `within-database' creates lexical scope where not only + `define-command' and `define-table', but every command and macro + are defined, ie.: + + (within-database my-rdb + (define-command (message rdb) + (lambda (msg) + (display "message: ") + (display msg) + (newline))) + (message "Defining FOO...") + ;; ... defining FOO ... + (message "Defining BAR...") + ;; ... defining BAR ... + ) + File: slib.info, Node: Within-database Example, Prev: Within-database, Up: Database Macros - | -6.1.5.2 Within-database Example | -............................... | + +6.1.5.2 Within-database Example +............................... Here is an example of `within-database' macros: @@ -10001,31 +10202,31 @@ Here is an example of `within-database' macros: File: slib.info, Node: Database Browser, Prev: Database Macros, Up: Relational Database -6.1.6 Database Browser | ----------------------- | +6.1.6 Database Browser +---------------------- (require 'database-browse) - -- Procedure: browse database | + -- Procedure: browse database Prints the names of all the tables in DATABASE and sets browse's default to DATABASE. - -- Procedure: browse | + -- Procedure: browse Prints the names of all the tables in the default database. - -- Procedure: browse table-name | + -- Procedure: browse table-name For each record of the table named by the symbol TABLE-NAME, prints a line composed of all the field values. - -- Procedure: browse pathname | + -- Procedure: browse pathname Opens the database named by the string PATHNAME, prints the names of all its tables, and sets browse's default to the database. - -- Procedure: browse database table-name | + -- Procedure: browse database table-name Sets browse's default to DATABASE and prints the records of the table named by the symbol TABLE-NAME. - -- Procedure: browse pathname table-name | + -- Procedure: browse pathname table-name Opens the database named by the string PATHNAME and sets browse's default to it; `browse' prints the records of the table named by the symbol TABLE-NAME. @@ -10034,8 +10235,8 @@ File: slib.info, Node: Database Browser, Prev: Database Macros, Up: Relationa File: slib.info, Node: Relational Infrastructure, Next: Weight-Balanced Trees, Prev: Relational Database, Up: Database Packages -6.2 Relational Infrastructure | -============================= | +6.2 Relational Infrastructure +============================= * Menu: @@ -10047,8 +10248,8 @@ File: slib.info, Node: Relational Infrastructure, Next: Weight-Balanced Trees, File: slib.info, Node: Base Table, Next: Catalog Representation, Prev: Relational Infrastructure, Up: Relational Infrastructure -6.2.1 Base Table | ----------------- | +6.2.1 Base Table +---------------- A "base-table" is the primitive database layer upon which SLIB relational databases are built. At the minimum, it must support the @@ -10059,7 +10260,7 @@ the size of integers, symbols, and strings it supports. identifier naming it (eg. ALIST-TABLE) after requiring the symbol of that name. - -- Feature: alist-table | + -- Feature: alist-table `(require 'alist-table)' Association-list base tables support all Scheme types and are @@ -10075,14 +10276,14 @@ that name. disk-based, WB databases readily store and access hundreds of megabytes of data. WB comes with two base-table embeddings. - -- Feature: wb-table | + -- Feature: wb-table `(require 'wb-table)' `wb-table' supports scheme expressions for keys and values whose text representations are less than 255 characters in length. *Note wb-table: (wb)wb-table. - -- Feature: rwb-isam | + -- Feature: rwb-isam `(require 'rwb-isam)' "rwb-isam" is a sophisticated base-table implementation built on @@ -10095,7 +10296,7 @@ implementation from which the *Note Relational Database:: package constructs a Relational system. It will be of interest primarily to those wishing to port or write new base-table implementations. - -- Variable: *base-table-implementations* | + -- Variable: *base-table-implementations* To support automatic dispatch for `open-database', each base-table module adds an association to *BASE-TABLE-IMPLEMENTATIONS* when loaded. This association is the list of the base-table symbol and @@ -10115,8 +10316,8 @@ those wishing to port or write new base-table implementations. File: slib.info, Node: The Base, Next: Base Tables, Prev: Base Table, Up: Base Table -6.2.1.1 The Base | -................ | +6.2.1.1 The Base +................ All of these functions are accessed through a single procedure by calling that procedure with the symbol name of the operation. A @@ -10129,7 +10330,7 @@ otherwise. For example: (define foo (alist-table 'foo)) foo => #f - -- Operation on base-table: make-base filename key-dimension | + -- Operation on base-table: make-base filename key-dimension column-types Returns a new, open, low-level database (collection of tables) associated with FILENAME. This returned database has an empty @@ -10144,7 +10345,7 @@ otherwise. For example: `#f' a temporary, non-disk based database will be created if such can be supported by the base table implelentation. - -- Operation on base-table: open-base filename mutable | + -- Operation on base-table: open-base filename mutable Returns an open low-level database associated with FILENAME. If MUTABLE is `#t', this database will have methods capable of effecting change to the database. If MUTABLE is `#f', only @@ -10154,7 +10355,7 @@ otherwise. For example: Calling the `close-base' (and possibly other) method on a MUTABLE database will cause FILENAME to be written to. - -- Operation on base-table: write-base lldb filename | + -- Operation on base-table: write-base lldb filename Causes the low-level database LLDB to be written to FILENAME. If the write is successful, also causes LLDB to henceforth be associated with FILENAME. Calling the `close-database' (and @@ -10164,14 +10365,14 @@ otherwise. For example: underlying base table implelentation. If the operations completed successfully, `#t' is returned. Otherwise, `#f' is returned. - -- Operation on base-table: sync-base lldb | + -- Operation on base-table: sync-base lldb Causes the file associated with the low-level database LLDB to be updated to reflect its current state. If the associated filename is `#f', no action is taken and `#f' is returned. If this operation completes successfully, `#t' is returned. Otherwise, `#f' is returned. - -- Operation on base-table: close-base lldb | + -- Operation on base-table: close-base lldb Causes the low-level database LLDB to be written to its associated file (if any). If the write is successful, subsequent operations to LLDB will signal an error. If the operations complete @@ -10180,10 +10381,10 @@ otherwise. For example: File: slib.info, Node: Base Tables, Next: Base Field Types, Prev: The Base, Up: Base Table -6.2.1.2 Base Tables | -................... | +6.2.1.2 Base Tables +................... - -- Operation on base-table: make-table lldb key-dimension column-types | + -- Operation on base-table: make-table lldb key-dimension column-types Returns the ordinal BASE-ID for a new base table, otherwise returns `#f'. The base table can then be opened using `(open-table LLDB BASE-ID)'. The positive integer KEY-DIMENSION @@ -10191,7 +10392,7 @@ File: slib.info, Node: Base Tables, Next: Base Field Types, Prev: The Base, table. The list of symbols COLUMN-TYPES describes the types of each column. - -- Operation on base-table: open-table lldb base-id key-dimension | + -- Operation on base-table: open-table lldb base-id key-dimension column-types Returns a HANDLE for an existing base table in the low-level database LLDB if that table exists and can be opened in the mode @@ -10201,12 +10402,12 @@ File: slib.info, Node: Base Tables, Next: Base Field Types, Prev: The Base, number of keys composed to make a PRIMARY-KEY for this table. The list of symbols COLUMN-TYPES describes the types of each column. - -- Operation on base-table: kill-table lldb base-id key-dimension | + -- Operation on base-table: kill-table lldb base-id key-dimension column-types Returns `#t' if the base table associated with BASE-ID was removed from the low level database LLDB, and `#f' otherwise. - -- Operation on base-table: catalog-id | + -- Operation on base-table: catalog-id A constant BASE-ID ordinal suitable for passing as a parameter to `open-table'. CATALOG-ID will be used as the base table for the system catalog. @@ -10214,16 +10415,16 @@ File: slib.info, Node: Base Tables, Next: Base Field Types, Prev: The Base, File: slib.info, Node: Base Field Types, Next: Composite Keys, Prev: Base Tables, Up: Base Table -6.2.1.3 Base Field Types | -........................ | +6.2.1.3 Base Field Types +........................ - -- Operation on base-table: supported-type? symbol | + -- Operation on base-table: supported-type? symbol Returns `#t' if SYMBOL names a type allowed as a column value by the implementation, and `#f' otherwise. At a minimum, an implementation must support the types `integer', `ordinal', `symbol', `string', and `boolean'. - -- Operation on base-table: supported-key-type? symbol | + -- Operation on base-table: supported-key-type? symbol Returns `#t' if SYMBOL names a type allowed as a key value by the implementation, and `#f' otherwise. At a minimum, an implementation must support the types `ordinal', and `symbol'. @@ -10234,10 +10435,10 @@ standard Scheme. File: slib.info, Node: Composite Keys, Next: Base Record Operations, Prev: Base Field Types, Up: Base Table -6.2.1.4 Composite Keys | -...................... | +6.2.1.4 Composite Keys +...................... - -- Operation on base-table: make-keyifier-1 type | + -- Operation on base-table: make-keyifier-1 type Returns a procedure which accepts a single argument which must be of type TYPE. This returned procedure returns an object suitable for being a KEY argument in the functions whose descriptions @@ -10247,7 +10448,7 @@ File: slib.info, Node: Composite Keys, Next: Base Record Operations, Prev: Ba function which are not `equal?' must result in returned values which are not `equal?'. - -- Operation on base-table: make-list-keyifier key-dimension types | + -- Operation on base-table: make-list-keyifier key-dimension types The list of symbols TYPES must have at least KEY-DIMENSION elements. Returns a procedure which accepts a list of length KEY-DIMENSION and whose types must corresopond to the types named @@ -10260,7 +10461,7 @@ File: slib.info, Node: Composite Keys, Next: Base Record Operations, Prev: Ba which are not `equal?' must result in returned values which are not `equal?'. - -- Operation on base-table: make-key-extractor key-dimension types | + -- Operation on base-table: make-key-extractor key-dimension types column-number Returns a procedure which accepts objects produced by application of the result of `(make-list-keyifier KEY-DIMENSION TYPES)'. This @@ -10268,7 +10469,7 @@ File: slib.info, Node: Composite Keys, Next: Base Record Operations, Prev: Ba element of the list which was passed to create COMPOSITE-KEY. The list TYPES must have at least KEY-DIMENSION elements. - -- Operation on base-table: make-key->list key-dimension types | + -- Operation on base-table: make-key->list key-dimension types Returns a procedure which accepts objects produced by application of the result of `(make-list-keyifier KEY-DIMENSION TYPES)'. This procedure returns a list of KEYs which are elementwise `equal?' to @@ -10277,17 +10478,17 @@ File: slib.info, Node: Composite Keys, Next: Base Record Operations, Prev: Ba File: slib.info, Node: Base Record Operations, Next: Match Keys, Prev: Composite Keys, Up: Base Table -6.2.1.5 Base Record Operations | -.............................. | +6.2.1.5 Base Record Operations +.............................. In the following functions, the KEY argument can always be assumed to be the value returned by a call to a _keyify_ routine. - -- Operation on base-table: present? handle key | + -- Operation on base-table: present? handle key Returns a non-`#f' value if there is a row associated with KEY in the table opened in HANDLE and `#f' otherwise. - -- Operation on base-table: make-getter key-dimension types | + -- Operation on base-table: make-getter key-dimension types Returns a procedure which takes arguments HANDLE and KEY. This procedure returns a list of the non-primary values of the relation (in the base table opened in HANDLE) whose primary key is KEY if @@ -10296,7 +10497,7 @@ be the value returned by a call to a _keyify_ routine. `make-getter-1' is a new operation. The relational-database module works with older base-table implementations by using `make-getter'. - -- Operation on base-table: make-getter-1 key-dimension types index | + -- Operation on base-table: make-getter-1 key-dimension types index Returns a procedure which takes arguments HANDLE and KEY. This procedure returns the value of the INDEXth field (in the base table opened in HANDLE) whose primary key is KEY if it exists, and @@ -10304,21 +10505,21 @@ works with older base-table implementations by using `make-getter'. INDEX must be larger than KEY-DIMENSION. - -- Operation on base-table: make-putter key-dimension types | + -- Operation on base-table: make-putter key-dimension types Returns a procedure which takes arguments HANDLE and KEY and VALUE-LIST. This procedure associates the primary key KEY with the values in VALUE-LIST (in the base table opened in HANDLE) and returns an unspecified value. - -- Operation on base-table: delete handle key | + -- Operation on base-table: delete handle key Removes the row associated with KEY from the table opened in HANDLE. An unspecified value is returned. File: slib.info, Node: Match Keys, Next: Aggregate Base Operations, Prev: Base Record Operations, Up: Base Table -6.2.1.6 Match Keys | -.................. | +6.2.1.6 Match Keys +.................. A MATCH-KEYS argument is a list of length equal to the number of primary keys. The MATCH-KEYS restrict the actions of the table command @@ -10340,24 +10541,24 @@ element of the MATCH-KEYS list. The elements and their actions are: File: slib.info, Node: Aggregate Base Operations, Next: Base ISAM Operations, Prev: Match Keys, Up: Base Table -6.2.1.7 Aggregate Base Operations | -................................. | +6.2.1.7 Aggregate Base Operations +................................. The KEY-DIMENSION and COLUMN-TYPES arguments are needed to decode the composite-keys for matching with MATCH-KEYS. - -- Operation on base-table: delete* handle key-dimension column-types | + -- Operation on base-table: delete* handle key-dimension column-types match-keys Removes all rows which satisfy MATCH-KEYS from the table opened in HANDLE. An unspecified value is returned. - -- Operation on base-table: for-each-key handle procedure | - key-dimension column-types match-keys | + -- Operation on base-table: for-each-key handle procedure + key-dimension column-types match-keys Calls PROCEDURE once with each KEY in the table opened in HANDLE which satisfy MATCH-KEYS in an unspecified order. An unspecified value is returned. - -- Operation on base-table: map-key handle procedure key-dimension | + -- Operation on base-table: map-key handle procedure key-dimension column-types match-keys Returns a list of the values returned by calling PROCEDURE once with each KEY in the table opened in HANDLE which satisfy @@ -10366,19 +10567,19 @@ composite-keys for matching with MATCH-KEYS. File: slib.info, Node: Base ISAM Operations, Prev: Aggregate Base Operations, Up: Base Table -6.2.1.8 Base ISAM Operations | -............................ | +6.2.1.8 Base ISAM Operations +............................ These operations are optional for a Base-Table implementation. - -- Operation on base-table: ordered-for-each-key handle procedure | + -- Operation on base-table: ordered-for-each-key handle procedure key-dimension column-types match-keys Calls PROCEDURE once with each KEY in the table opened in HANDLE which satisfy MATCH-KEYS in the natural order for the types of the primary key fields of that table. An unspecified value is returned. - -- Operation on base-table: make-nexter handle key-dimension | + -- Operation on base-table: make-nexter handle key-dimension column-types index Returns a procedure of arguments KEY1 KEY2 ... which returns the key-list identifying the lowest record higher than KEY1 KEY2 ... @@ -10386,7 +10587,7 @@ These operations are optional for a Base-Table implementation. INDEX or a lower indexed key; or false if no higher record is present. - -- Operation on base-table: make-prever handle key-dimension | + -- Operation on base-table: make-prever handle key-dimension column-types index Returns a procedure of arguments KEY1 KEY2 ... which returns the key-list identifying the highest record less than KEY1 KEY2 ... @@ -10397,8 +10598,8 @@ These operations are optional for a Base-Table implementation. File: slib.info, Node: Catalog Representation, Next: Relational Database Objects, Prev: Base Table, Up: Relational Infrastructure -6.2.2 Catalog Representation | ----------------------------- | +6.2.2 Catalog Representation +---------------------------- Each database (in an implementation) has a "system catalog" which describes all the user accessible tables in that database (including @@ -10466,14 +10667,14 @@ The types for which support is planned are: File: slib.info, Node: Relational Database Objects, Next: Database Operations, Prev: Catalog Representation, Up: Relational Infrastructure -6.2.3 Relational Database Objects | ---------------------------------- | +6.2.3 Relational Database Objects +--------------------------------- This object-oriented interface is deprecated for typical database applications; *Note Using Databases:: provides an application programmer interface which is easier to understand and use. - -- Function: make-relational-system base-table-implementation | + -- Function: make-relational-system base-table-implementation Returns a procedure implementing a relational database using the BASE-TABLE-IMPLEMENTATION. @@ -10496,7 +10697,7 @@ interface which is easier to understand and use. What follows are the descriptions of the methods available from relational system returned by a call to `make-relational-system'. - -- Operation on relational-system: create-database filename | + -- Operation on relational-system: create-database filename Returns an open, nearly empty relational database associated with FILENAME. The only tables defined are the system catalog and domain table. Calling the `close-database' method on this database @@ -10507,7 +10708,7 @@ relational system returned by a call to `make-relational-system'. `#f' is returned. For the fields and layout of descriptor tables, *Note Catalog Representation:: - -- Operation on relational-system: open-database filename mutable? | + -- Operation on relational-system: open-database filename mutable? Returns an open relational database associated with FILENAME. If MUTABLE? is `#t', this database will have methods capable of effecting change to the database. If MUTABLE? is `#f', only @@ -10519,8 +10720,8 @@ relational system returned by a call to `make-relational-system'. File: slib.info, Node: Database Operations, Prev: Relational Database Objects, Up: Relational Infrastructure -6.2.4 Database Operations | -------------------------- | +6.2.4 Database Operations +------------------------- This object-oriented interface is deprecated for typical database applications; *Note Using Databases:: provides an application programmer @@ -10535,13 +10736,13 @@ the database with the symbol name of the operation. For example: (define telephone-table-desc ((my-database 'create-table) 'telephone-table-desc)) - -- Operation on relational-database: close-database | + -- Operation on relational-database: close-database Causes the relational database to be written to its associated file (if any). If the write is successful, subsequent operations to this database will signal an error. If the operations completed successfully, `#t' is returned. Otherwise, `#f' is returned. - -- Operation on relational-database: write-database filename | + -- Operation on relational-database: write-database filename Causes the relational database to be written to FILENAME. If the write is successful, also causes the database to henceforth be associated with FILENAME. Calling the `close-database' (and @@ -10552,55 +10753,55 @@ the database with the symbol name of the operation. For example: completed successfully, `#t' is returned. Otherwise, `#f' is returned. - -- Operation on relational-database: sync-database | + -- Operation on relational-database: sync-database Causes any pending updates to the database file to be written out. If the operations completed successfully, `#t' is returned. Otherwise, `#f' is returned. - -- Operation on relational-database: solidify-database | + -- Operation on relational-database: solidify-database Causes any pending updates to the database file to be written out. If the writes completed successfully, then the database is changed to be immutable and `#t' is returned. Otherwise, `#f' is returned. - -- Operation on relational-database: table-exists? table-name | + -- Operation on relational-database: table-exists? table-name Returns `#t' if TABLE-NAME exists in the system catalog, otherwise returns `#f'. - -- Operation on relational-database: open-table table-name mutable? | + -- Operation on relational-database: open-table table-name mutable? Returns a "methods" procedure for an existing relational table in this database if it exists and can be opened in the mode indicated by MUTABLE?, otherwise returns `#f'. These methods will be present only in mutable databases. - -- Operation on relational-database: delete-table table-name | + -- Operation on relational-database: delete-table table-name Removes and returns the TABLE-NAME row from the system catalog if the table or view associated with TABLE-NAME gets removed from the database, and `#f' otherwise. - -- Operation on relational-database: create-table table-desc-name | + -- Operation on relational-database: create-table table-desc-name Returns a methods procedure for a new (open) relational table for describing the columns of a new base table in this database, otherwise returns `#f'. For the fields and layout of descriptor tables, *Note Catalog Representation::. - -- Operation on relational-database: create-table table-name | + -- Operation on relational-database: create-table table-name table-desc-name Returns a methods procedure for a new (open) relational table with columns as described by TABLE-DESC-NAME, otherwise returns `#f'. - -- Operation on relational-database: create-view ?? | - -- Operation on relational-database: project-table ?? | - -- Operation on relational-database: restrict-table ?? | - -- Operation on relational-database: cart-prod-tables ?? | + -- Operation on relational-database: create-view ?? + -- Operation on relational-database: project-table ?? + -- Operation on relational-database: restrict-table ?? + -- Operation on relational-database: cart-prod-tables ?? Not yet implemented. File: slib.info, Node: Weight-Balanced Trees, Prev: Relational Infrastructure, Up: Database Packages -6.3 Weight-Balanced Trees | -========================= | +6.3 Weight-Balanced Trees +========================= `(require 'wt-tree)' @@ -10682,8 +10883,8 @@ once before calling any of the procedures defined here. File: slib.info, Node: Construction of Weight-Balanced Trees, Next: Basic Operations on Weight-Balanced Trees, Prev: Weight-Balanced Trees, Up: Weight-Balanced Trees -6.3.1 Construction of Weight-Balanced Trees | -------------------------------------------- | +6.3.1 Construction of Weight-Balanced Trees +------------------------------------------- Binary trees require there to be a total order on the keys used to arrange the elements in the tree. Weight balanced trees are organized @@ -10697,7 +10898,7 @@ compatibility between trees in operations taking two trees. Usually a small number of tree types are created at the beginning of a program and used many times throughout the program's execution. - -- procedure+: make-wt-tree-type key<? | + -- procedure+: make-wt-tree-type key<? This procedure creates and returns a new tree type based on the ordering predicate KEY<?. KEY<? must be a total ordering, having the property that for all key values `a', `b' and `c': @@ -10717,33 +10918,33 @@ used many times throughout the program's execution. tree operations must all be created with a tree type originating from the same call to `make-wt-tree-type'. - -- variable+: number-wt-type | + -- variable+: number-wt-type A standard tree type for trees with numeric keys. `Number-wt-type' could have been defined by (define number-wt-type (make-wt-tree-type <)) - -- variable+: string-wt-type | + -- variable+: string-wt-type A standard tree type for trees with string keys. `String-wt-type' could have been defined by (define string-wt-type (make-wt-tree-type string<?)) - -- procedure+: make-wt-tree wt-tree-type | + -- procedure+: make-wt-tree wt-tree-type This procedure creates and returns a newly allocated weight balanced tree. The tree is empty, i.e. it contains no associations. WT-TREE-TYPE is a weight balanced tree type obtained by calling `make-wt-tree-type'; the returned tree has this type. - -- procedure+: singleton-wt-tree wt-tree-type key datum | + -- procedure+: singleton-wt-tree wt-tree-type key datum This procedure creates and returns a newly allocated weight balanced tree. The tree contains a single association, that of DATUM with KEY. WT-TREE-TYPE is a weight balanced tree type obtained by calling `make-wt-tree-type'; the returned tree has this type. - -- procedure+: alist->wt-tree tree-type alist | + -- procedure+: alist->wt-tree tree-type alist Returns a newly allocated weight-balanced tree that contains the same associations as ALIST. This procedure is equivalent to: @@ -10759,23 +10960,23 @@ used many times throughout the program's execution. File: slib.info, Node: Basic Operations on Weight-Balanced Trees, Next: Advanced Operations on Weight-Balanced Trees, Prev: Construction of Weight-Balanced Trees, Up: Weight-Balanced Trees -6.3.2 Basic Operations on Weight-Balanced Trees | ------------------------------------------------ | +6.3.2 Basic Operations on Weight-Balanced Trees +----------------------------------------------- This section describes the basic tree operations on weight balanced trees. These operations are the usual tree operations for insertion, deletion and lookup, some predicates and a procedure for determining the number of associations in a tree. - -- procedure+: wt-tree/empty? wt-tree | + -- procedure+: wt-tree/empty? wt-tree Returns `#t' if WT-TREE contains no associations, otherwise returns `#f'. - -- procedure+: wt-tree/size wt-tree | + -- procedure+: wt-tree/size wt-tree Returns the number of associations in WT-TREE, an exact non-negative integer. This operation takes constant time. - -- procedure+: wt-tree/add wt-tree key datum | + -- procedure+: wt-tree/add wt-tree key datum Returns a new tree containing all the associations in WT-TREE and the association of DATUM with KEY. If WT-TREE already had an association for KEY, the new association overrides the old. The @@ -10783,34 +10984,34 @@ number of associations in a tree. proportional to the logarithm of the number of associations in WT-TREE. - -- procedure+: wt-tree/add! wt-tree key datum | + -- procedure+: wt-tree/add! wt-tree key datum Associates DATUM with KEY in WT-TREE and returns an unspecified value. If WT-TREE already has an association for KEY, that association is replaced. The average and worst-case times required by this operation are proportional to the logarithm of the number of associations in WT-TREE. - -- procedure+: wt-tree/member? key wt-tree | + -- procedure+: wt-tree/member? key wt-tree Returns `#t' if WT-TREE contains an association for KEY, otherwise returns `#f'. The average and worst-case times required by this operation are proportional to the logarithm of the number of associations in WT-TREE. - -- procedure+: wt-tree/lookup wt-tree key default | + -- procedure+: wt-tree/lookup wt-tree key default Returns the datum associated with KEY in WT-TREE. If WT-TREE doesn't contain an association for KEY, DEFAULT is returned. The average and worst-case times required by this operation are proportional to the logarithm of the number of associations in WT-TREE. - -- procedure+: wt-tree/delete wt-tree key | + -- procedure+: wt-tree/delete wt-tree key Returns a new tree containing all the associations in WT-TREE, except that if WT-TREE contains an association for KEY, it is removed from the result. The average and worst-case times required by this operation are proportional to the logarithm of the number of associations in WT-TREE. - -- procedure+: wt-tree/delete! wt-tree key | + -- procedure+: wt-tree/delete! wt-tree key If WT-TREE contains an association for KEY the association is removed. Returns an unspecified value. The average and worst-case times required by this operation are proportional to the logarithm @@ -10819,28 +11020,28 @@ number of associations in a tree. File: slib.info, Node: Advanced Operations on Weight-Balanced Trees, Next: Indexing Operations on Weight-Balanced Trees, Prev: Basic Operations on Weight-Balanced Trees, Up: Weight-Balanced Trees -6.3.3 Advanced Operations on Weight-Balanced Trees | --------------------------------------------------- | +6.3.3 Advanced Operations on Weight-Balanced Trees +-------------------------------------------------- In the following the _size_ of a tree is the number of associations that the tree contains, and a _smaller_ tree contains fewer associations. - -- procedure+: wt-tree/split< wt-tree bound | + -- procedure+: wt-tree/split< wt-tree bound Returns a new tree containing all and only the associations in WT-TREE which have a key that is less than BOUND in the ordering relation of the tree type of WT-TREE. The average and worst-case times required by this operation are proportional to the logarithm of the size of WT-TREE. - -- procedure+: wt-tree/split> wt-tree bound | + -- procedure+: wt-tree/split> wt-tree bound Returns a new tree containing all and only the associations in WT-TREE which have a key that is greater than BOUND in the ordering relation of the tree type of WT-TREE. The average and worst-case times required by this operation are proportional to the logarithm of size of WT-TREE. - -- procedure+: wt-tree/union wt-tree-1 wt-tree-2 | + -- procedure+: wt-tree/union wt-tree-1 wt-tree-2 Returns a new tree containing all the associations from both trees. This operation is asymmetric: when both trees have an association for the same key, the returned tree associates the datum from @@ -10853,7 +11054,7 @@ associations. the other tree then the time required is at worst proportional to the logarithm of the size of the larger tree. - -- procedure+: wt-tree/intersection wt-tree-1 wt-tree-2 | + -- procedure+: wt-tree/intersection wt-tree-1 wt-tree-2 Returns a new tree containing all and only those associations from WT-TREE-1 which have keys appearing as the key of an association in WT-TREE-2. Thus the associated data in the result are those @@ -10864,7 +11065,7 @@ associations. this operation is never worse that proportional to the sum of the sizes of the trees. - -- procedure+: wt-tree/difference wt-tree-1 wt-tree-2 | + -- procedure+: wt-tree/difference wt-tree-1 wt-tree-2 Returns a new tree containing all and only those associations from WT-TREE-1 which have keys that _do not_ appear as the key of an association in WT-TREE-2. If the trees are viewed as sets the @@ -10874,7 +11075,7 @@ associations. time required by this operation is never worse that proportional to the sum of the sizes of the trees. - -- procedure+: wt-tree/subset? wt-tree-1 wt-tree-2 | + -- procedure+: wt-tree/subset? wt-tree-1 wt-tree-2 Returns `#t' iff the key of each association in WT-TREE-1 is the key of some association in WT-TREE-2, otherwise returns `#f'. Viewed as a set operation, `wt-tree/subset?' is the improper subset @@ -10889,7 +11090,7 @@ associations. required by this operation is proportional to the size of WT-TREE-1. - -- procedure+: wt-tree/set-equal? wt-tree-1 wt-tree-2 | + -- procedure+: wt-tree/set-equal? wt-tree-1 wt-tree-2 Returns `#t' iff for every association in WT-TREE-1 there is an association in WT-TREE-2 that has the same key, and _vice versa_. @@ -10906,7 +11107,7 @@ associations. In the worst-case the time required by this operation is proportional to the size of the smaller tree. - -- procedure+: wt-tree/fold combiner initial wt-tree | + -- procedure+: wt-tree/fold combiner initial wt-tree This procedure reduces WT-TREE by combining all the associations, using an reverse in-order traversal, so the associations are visited in reverse order. COMBINER is a procedure of three @@ -10927,7 +11128,7 @@ associations. 0 WT-TREE) - -- procedure+: wt-tree/for-each action wt-tree | + -- procedure+: wt-tree/for-each action wt-tree This procedure traverses the tree in-order, applying ACTION to each association. The associations are processed in increasing order of their keys. ACTION is a procedure of two arguments which @@ -10943,17 +11144,17 @@ associations. File: slib.info, Node: Indexing Operations on Weight-Balanced Trees, Prev: Advanced Operations on Weight-Balanced Trees, Up: Weight-Balanced Trees -6.3.4 Indexing Operations on Weight-Balanced Trees | --------------------------------------------------- | +6.3.4 Indexing Operations on Weight-Balanced Trees +-------------------------------------------------- Weight balanced trees support operations that view the tree as sorted sequence of associations. Elements of the sequence can be accessed by position, and the position of an element in the sequence can be determined, both in logarthmic time. - -- procedure+: wt-tree/index wt-tree index | - -- procedure+: wt-tree/index-datum wt-tree index | - -- procedure+: wt-tree/index-pair wt-tree index | + -- procedure+: wt-tree/index wt-tree index + -- procedure+: wt-tree/index-datum wt-tree index + -- procedure+: wt-tree/index-pair wt-tree index Returns the 0-based INDEXth association of WT-TREE in the sorted sequence under the tree's ordering relation on the keys. `wt-tree/index' returns the INDEXth key, `wt-tree/index-datum' @@ -10974,7 +11175,7 @@ determined, both in logarthmic time. maximum: (wt-tree/index WT-TREE (-1+ (wt-tree/size WT-TREE))) - -- procedure+: wt-tree/rank wt-tree key | + -- procedure+: wt-tree/rank wt-tree key Determines the 0-based position of KEY in the sorted sequence of the keys under the tree's ordering relation, or `#f' if the tree has no association with for KEY. This procedure returns either an @@ -10982,9 +11183,9 @@ determined, both in logarthmic time. times required by this operation are proportional to the logarithm of the number of associations in the tree. - -- procedure+: wt-tree/min wt-tree | - -- procedure+: wt-tree/min-datum wt-tree | - -- procedure+: wt-tree/min-pair wt-tree | + -- procedure+: wt-tree/min wt-tree + -- procedure+: wt-tree/min-datum wt-tree + -- procedure+: wt-tree/min-pair wt-tree Returns the association of WT-TREE that has the least key under the tree's ordering relation. `wt-tree/min' returns the least key, `wt-tree/min-datum' returns the datum associated with the least key @@ -10999,7 +11200,7 @@ determined, both in logarthmic time. (define (wt-tree/min-datum tree) (wt-tree/index-datum tree 0)) (define (wt-tree/min-pair tree) (wt-tree/index-pair tree 0)) - -- procedure+: wt-tree/delete-min wt-tree | + -- procedure+: wt-tree/delete-min wt-tree Returns a new tree containing all of the associations in WT-TREE except the association with the least key under the WT-TREE's ordering relation. An error is signalled if the tree is empty. @@ -11009,7 +11210,7 @@ determined, both in logarthmic time. (wt-tree/delete WT-TREE (wt-tree/min WT-TREE)) - -- procedure+: wt-tree/delete-min! wt-tree | + -- procedure+: wt-tree/delete-min! wt-tree Removes the association with the least key under the WT-TREE's ordering relation. An error is signalled if the tree is empty. The average and worst-case times required by this operation are @@ -11021,8 +11222,8 @@ determined, both in logarthmic time. File: slib.info, Node: Other Packages, Next: About SLIB, Prev: Database Packages, Up: Top -7 Other Packages | -**************** | +7 Other Packages +**************** * Menu: @@ -11037,14 +11238,15 @@ File: slib.info, Node: Other Packages, Next: About SLIB, Prev: Database Packa File: slib.info, Node: Data Structures, Next: Sorting and Searching, Prev: Other Packages, Up: Other Packages -7.1 Data Structures | -=================== | +7.1 Data Structures +=================== * Menu: * Arrays:: 'array * Subarrays:: 'subarray * Array Mapping:: 'array-for-each +* Array Interpolation:: 'array-interpolate | * Association Lists:: 'alist * Byte:: 'byte * Byte/Number Conversions:: 'byte-number @@ -11061,79 +11263,79 @@ File: slib.info, Node: Data Structures, Next: Sorting and Searching, Prev: Ot File: slib.info, Node: Arrays, Next: Subarrays, Prev: Data Structures, Up: Data Structures -7.1.1 Arrays | ------------- | +7.1.1 Arrays +------------ -`(require 'array)' or `(require 'srfi-63)' | +`(require 'array)' or `(require 'srfi-63)' - -- Function: array? obj | + -- Function: array? obj Returns `#t' if the OBJ is an array, and `#f' if not. -_Note:_ Arrays are not disjoint from other Scheme types. Vectors and | -possibly strings also satisfy `array?'. A disjoint array predicate can | -be written: | +_Note:_ Arrays are not disjoint from other Scheme types. Vectors and +possibly strings also satisfy `array?'. A disjoint array predicate can +be written: (define (strict-array? obj) (and (array? obj) (not (string? obj)) (not (vector? obj)))) - -- Function: equal? obj1 obj2 | - Returns `#t' if OBJ1 and OBJ2 have the same rank and dimensions | - and the corresponding elements of OBJ1 and OBJ2 are `equal?'. | - - `equal?' recursively compares the contents of pairs, vectors, | - strings, and _arrays_, applying `eqv?' on other objects such as | - numbers and symbols. A rule of thumb is that objects are | - generally `equal?' if they print the same. `equal?' may fail to | - terminate if its arguments are circular data structures. | - - (equal? 'a 'a) => #t | - (equal? '(a) '(a)) => #t | - (equal? '(a (b) c) | - '(a (b) c)) => #t | - (equal? "abc" "abc") => #t | - (equal? 2 2) => #t | - (equal? (make-vector 5 'a) | - (make-vector 5 'a)) => #t | - (equal? (make-array (A:fixN32b 4) 5 3) | - (make-array (A:fixN32b 4) 5 3)) => #t | - (equal? (make-array '#(foo) 3 3) | - (make-array '#(foo) 3 3)) => #t | - (equal? (lambda (x) x) | - (lambda (y) y)) => _unspecified_ | - - -- Function: array-rank obj | - Returns the number of dimensions of OBJ. If OBJ is not an array, | - 0 is returned. | - - -- Function: array-dimensions array | - Returns a list of dimensions. | - - (array-dimensions (make-array '#() 3 5)) | - => (3 5) | - - -- Function: make-array prototype k1 ... | - Creates and returns an array of type PROTOTYPE with dimensions K1, | - ... and filled with elements from PROTOTYPE. PROTOTYPE must be | - an array, vector, or string. The implementation-dependent type of | - the returned array will be the same as the type of PROTOTYPE; | - except if that would be a vector or string with rank not equal to | - one, in which case some variety of array will be returned. | - - If the PROTOTYPE has no elements, then the initial contents of the | - returned array are unspecified. Otherwise, the returned array | - will be filled with the element at the origin of PROTOTYPE. | - - -- Function: create-array prototype k1 ... | - `create-array' is an alias for `make-array'. | - - -- Function: make-shared-array array mapper k1 ... | + -- Function: equal? obj1 obj2 + Returns `#t' if OBJ1 and OBJ2 have the same rank and dimensions + and the corresponding elements of OBJ1 and OBJ2 are `equal?'. + + `equal?' recursively compares the contents of pairs, vectors, + strings, and _arrays_, applying `eqv?' on other objects such as + numbers and symbols. A rule of thumb is that objects are + generally `equal?' if they print the same. `equal?' may fail to + terminate if its arguments are circular data structures. + + (equal? 'a 'a) => #t + (equal? '(a) '(a)) => #t + (equal? '(a (b) c) + '(a (b) c)) => #t + (equal? "abc" "abc") => #t + (equal? 2 2) => #t + (equal? (make-vector 5 'a) + (make-vector 5 'a)) => #t + (equal? (make-array (A:fixN32b 4) 5 3) + (make-array (A:fixN32b 4) 5 3)) => #t + (equal? (make-array '#(foo) 3 3) + (make-array '#(foo) 3 3)) => #t + (equal? (lambda (x) x) + (lambda (y) y)) => _unspecified_ + + -- Function: array-rank obj + Returns the number of dimensions of OBJ. If OBJ is not an array, + 0 is returned. + + -- Function: array-dimensions array + Returns a list of dimensions. + + (array-dimensions (make-array '#() 3 5)) + => (3 5) + + -- Function: make-array prototype k1 ... + Creates and returns an array of type PROTOTYPE with dimensions K1, + ... and filled with elements from PROTOTYPE. PROTOTYPE must be + an array, vector, or string. The implementation-dependent type of + the returned array will be the same as the type of PROTOTYPE; + except if that would be a vector or string with rank not equal to + one, in which case some variety of array will be returned. + + If the PROTOTYPE has no elements, then the initial contents of the + returned array are unspecified. Otherwise, the returned array + will be filled with the element at the origin of PROTOTYPE. + + -- Function: create-array prototype k1 ... + `create-array' is an alias for `make-array'. + + -- Function: make-shared-array array mapper k1 ... `make-shared-array' can be used to create shared subarrays of other arrays. The MAPPER is a function that translates coordinates in the new array into coordinates in the old array. A MAPPER must be linear, and its range must stay within the bounds of the old array, but it can be otherwise arbitrary. A simple example: - (define fred (make-array '#(#f) 8 8)) | + (define fred (make-array '#(#f) 8 8)) (define freds-diagonal (make-shared-array fred (lambda (i) (list i i)) 8)) (array-set! freds-diagonal 'foo 3) @@ -11145,167 +11347,167 @@ be written: | (array-ref freds-center 0 0) => FOO - -- Function: list->array rank proto list | - LIST must be a rank-nested list consisting of all the elements, in | - row-major order, of the array to be created. | + -- Function: list->array rank proto list + LIST must be a rank-nested list consisting of all the elements, in + row-major order, of the array to be created. - `list->array' returns an array of rank RANK and type PROTO | - consisting of all the elements, in row-major order, of LIST. When | - RANK is 0, LIST is the lone array element; not necessarily a list. | + `list->array' returns an array of rank RANK and type PROTO + consisting of all the elements, in row-major order, of LIST. When + RANK is 0, LIST is the lone array element; not necessarily a list. - (list->array 2 '#() '((1 2) (3 4))) | - => #2A((1 2) (3 4)) | - (list->array 0 '#() 3) | - => #0A 3 | + (list->array 2 '#() '((1 2) (3 4))) + => #2A((1 2) (3 4)) + (list->array 0 '#() 3) + => #0A 3 - -- Function: array->list array | - Returns a rank-nested list consisting of all the elements, in | - row-major order, of ARRAY. In the case of a rank-0 array, | - `array->list' returns the single element. | + -- Function: array->list array + Returns a rank-nested list consisting of all the elements, in + row-major order, of ARRAY. In the case of a rank-0 array, + `array->list' returns the single element. - (array->list #2A((ho ho ho) (ho oh oh))) | - => ((ho ho ho) (ho oh oh)) | - (array->list #0A ho) | - => ho | + (array->list #2A((ho ho ho) (ho oh oh))) + => ((ho ho ho) (ho oh oh)) + (array->list #0A ho) + => ho - -- Function: vector->array vect proto dim1 ... | - VECT must be a vector of length equal to the product of exact | - nonnegative integers DIM1, .... | - | - `vector->array' returns an array of type PROTO consisting of all | - the elements, in row-major order, of VECT. In the case of a | - rank-0 array, VECT has a single element. | - | - (vector->array #(1 2 3 4) #() 2 2) | - => #2A((1 2) (3 4)) | - (vector->array '#(3) '#()) | - => #0A 3 | - | - -- Function: array->vector array | - Returns a new vector consisting of all the elements of ARRAY in | - row-major order. | - | - (array->vector #2A ((1 2)( 3 4))) | - => #(1 2 3 4) | - (array->vector #0A ho) | - => #(ho) | - | - -- Function: array-in-bounds? array index1 ... | - Returns `#t' if its arguments would be acceptable to `array-ref'. + -- Function: vector->array vect proto dim1 ... + VECT must be a vector of length equal to the product of exact + nonnegative integers DIM1, .... - -- Function: array-ref array k1 ... | - Returns the (K1, ...) element of ARRAY. | + `vector->array' returns an array of type PROTO consisting of all + the elements, in row-major order, of VECT. In the case of a + rank-0 array, VECT has a single element. - -- Procedure: array-set! array obj k1 ... | - Stores OBJ in the (K1, ...) element of ARRAY. The value returned | - by `array-set!' is unspecified. | - | -These functions return a prototypical uniform-array enclosing the | -optional argument (which must be of the correct type). If the | -uniform-array type is supported by the implementation, then it is | -returned; defaulting to the next larger precision type; resorting | -finally to vector. | - | - -- Function: a:floc128b z | - -- Function: a:floc128b | - Returns an inexact 128.bit flonum complex uniform-array prototype. | - | - -- Function: a:floc64b z | - -- Function: a:floc64b | - Returns an inexact 64.bit flonum complex uniform-array prototype. | - | - -- Function: a:floc32b z | - -- Function: a:floc32b | - Returns an inexact 32.bit flonum complex uniform-array prototype. | - | - -- Function: a:floc16b z | - -- Function: a:floc16b | - Returns an inexact 16.bit flonum complex uniform-array prototype. | - | - -- Function: a:flor128b z | - -- Function: a:flor128b | - Returns an inexact 128.bit flonum real uniform-array prototype. | - | - -- Function: a:flor64b z | - -- Function: a:flor64b | - Returns an inexact 64.bit flonum real uniform-array prototype. | - | - -- Function: a:flor32b z | - -- Function: a:flor32b | - Returns an inexact 32.bit flonum real uniform-array prototype. | - | - -- Function: a:flor16b z | - -- Function: a:flor16b | - Returns an inexact 16.bit flonum real uniform-array prototype. | - | - -- Function: a:flor128b z | - -- Function: a:flor128b | - Returns an exact 128.bit decimal flonum rational uniform-array | - prototype. | - | - -- Function: a:flor64b z | - -- Function: a:flor64b | - Returns an exact 64.bit decimal flonum rational uniform-array | - prototype. | - | - -- Function: a:flor32b z | - -- Function: a:flor32b | - Returns an exact 32.bit decimal flonum rational uniform-array | - prototype. | - | - -- Function: a:fixz64b n | - -- Function: a:fixz64b | - Returns an exact binary fixnum uniform-array prototype with at | - least 64 bits of precision. | - | - -- Function: a:fixz32b n | - -- Function: a:fixz32b | - Returns an exact binary fixnum uniform-array prototype with at | - least 32 bits of precision. | - | - -- Function: a:fixz16b n | - -- Function: a:fixz16b | - Returns an exact binary fixnum uniform-array prototype with at | - least 16 bits of precision. | - | - -- Function: a:fixz8b n | - -- Function: a:fixz8b | - Returns an exact binary fixnum uniform-array prototype with at | - least 8 bits of precision. | - | - -- Function: a:fixn64b k | - -- Function: a:fixn64b | - Returns an exact non-negative binary fixnum uniform-array | - prototype with at least 64 bits of precision. | - | - -- Function: a:fixn32b k | - -- Function: a:fixn32b | - Returns an exact non-negative binary fixnum uniform-array | - prototype with at least 32 bits of precision. | - | - -- Function: a:fixn16b k | - -- Function: a:fixn16b | - Returns an exact non-negative binary fixnum uniform-array | - prototype with at least 16 bits of precision. | - | - -- Function: a:fixn8b k | - -- Function: a:fixn8b | - Returns an exact non-negative binary fixnum uniform-array | - prototype with at least 8 bits of precision. | - | - -- Function: a:bool bool | - -- Function: a:bool | - Returns a boolean uniform-array prototype. | + (vector->array #(1 2 3 4) #() 2 2) + => #2A((1 2) (3 4)) + (vector->array '#(3) '#()) + => #0A 3 + + -- Function: array->vector array + Returns a new vector consisting of all the elements of ARRAY in + row-major order. + + (array->vector #2A ((1 2)( 3 4))) + => #(1 2 3 4) + (array->vector #0A ho) + => #(ho) + + -- Function: array-in-bounds? array index1 ... + Returns `#t' if its arguments would be acceptable to `array-ref'. + + -- Function: array-ref array k1 ... + Returns the (K1, ...) element of ARRAY. + + -- Procedure: array-set! array obj k1 ... + Stores OBJ in the (K1, ...) element of ARRAY. The value returned + by `array-set!' is unspecified. + +These functions return a prototypical uniform-array enclosing the +optional argument (which must be of the correct type). If the +uniform-array type is supported by the implementation, then it is +returned; defaulting to the next larger precision type; resorting +finally to vector. + + -- Function: a:floc128b z + -- Function: a:floc128b + Returns an inexact 128.bit flonum complex uniform-array prototype. + + -- Function: a:floc64b z + -- Function: a:floc64b + Returns an inexact 64.bit flonum complex uniform-array prototype. + + -- Function: a:floc32b z + -- Function: a:floc32b + Returns an inexact 32.bit flonum complex uniform-array prototype. + + -- Function: a:floc16b z + -- Function: a:floc16b + Returns an inexact 16.bit flonum complex uniform-array prototype. + + -- Function: a:flor128b z + -- Function: a:flor128b + Returns an inexact 128.bit flonum real uniform-array prototype. + + -- Function: a:flor64b z + -- Function: a:flor64b + Returns an inexact 64.bit flonum real uniform-array prototype. + + -- Function: a:flor32b z + -- Function: a:flor32b + Returns an inexact 32.bit flonum real uniform-array prototype. + + -- Function: a:flor16b z + -- Function: a:flor16b + Returns an inexact 16.bit flonum real uniform-array prototype. + + -- Function: a:flor128b z + -- Function: a:flor128b + Returns an exact 128.bit decimal flonum rational uniform-array + prototype. + + -- Function: a:flor64b z + -- Function: a:flor64b + Returns an exact 64.bit decimal flonum rational uniform-array + prototype. + + -- Function: a:flor32b z + -- Function: a:flor32b + Returns an exact 32.bit decimal flonum rational uniform-array + prototype. + + -- Function: a:fixz64b n + -- Function: a:fixz64b + Returns an exact binary fixnum uniform-array prototype with at + least 64 bits of precision. + + -- Function: a:fixz32b n + -- Function: a:fixz32b + Returns an exact binary fixnum uniform-array prototype with at + least 32 bits of precision. + + -- Function: a:fixz16b n + -- Function: a:fixz16b + Returns an exact binary fixnum uniform-array prototype with at + least 16 bits of precision. + + -- Function: a:fixz8b n + -- Function: a:fixz8b + Returns an exact binary fixnum uniform-array prototype with at + least 8 bits of precision. + + -- Function: a:fixn64b k + -- Function: a:fixn64b + Returns an exact non-negative binary fixnum uniform-array + prototype with at least 64 bits of precision. + + -- Function: a:fixn32b k + -- Function: a:fixn32b + Returns an exact non-negative binary fixnum uniform-array + prototype with at least 32 bits of precision. + + -- Function: a:fixn16b k + -- Function: a:fixn16b + Returns an exact non-negative binary fixnum uniform-array + prototype with at least 16 bits of precision. + + -- Function: a:fixn8b k + -- Function: a:fixn8b + Returns an exact non-negative binary fixnum uniform-array + prototype with at least 8 bits of precision. + + -- Function: a:bool bool + -- Function: a:bool + Returns a boolean uniform-array prototype. File: slib.info, Node: Subarrays, Next: Array Mapping, Prev: Arrays, Up: Data Structures -7.1.2 Subarrays | ---------------- | +7.1.2 Subarrays +--------------- `(require 'subarray)' - -- Function: subarray array select ... | + -- Function: subarray array select ... selects a subset of an array. For ARRAY of rank n, there must be at least n SELECTS arguments. For 0 <= j < n, SELECTSj is either an integer, a list of two integers within the range for the jth @@ -11337,10 +11539,10 @@ File: slib.info, Node: Subarrays, Next: Array Mapping, Prev: Arrays, Up: Dat > (subarray ra #f '(1 2)) #2A((b c) (e f)) - -- Variable: subarray0 | - Legacy alias for subarray. | + -- Variable: subarray0 + Legacy alias for subarray. - -- Function: array-trim array trim ... | + -- Function: array-trim array trim ... Returns a subarray sharing contents with ARRAY except for slices removed from either side of each dimension. Each of the TRIMS is an exact integer indicating how much to trim. A positive S trims @@ -11349,25 +11551,25 @@ File: slib.info, Node: Subarrays, Next: Array Mapping, Prev: Arrays, Up: Dat lower bound. For example: - (array-trim '#(0 1 2 3 4) 1) => #1A(1 2 3 4) | - (array-trim '#(0 1 2 3 4) -1) => #1A(0 1 2 3) | + (array-trim '#(0 1 2 3 4) 1) => #1A(1 2 3 4) + (array-trim '#(0 1 2 3 4) -1) => #1A(0 1 2 3) (require 'array-for-each) (define (centered-difference ra) - (array-map ra - (array-trim ra 1) (array-trim ra -1))) | + (array-map ra - (array-trim ra 1) (array-trim ra -1))) (centered-difference '#(0 1 3 5 9 22)) - => #(1 2 2 4 13) | + => #(1 2 2 4 13) -File: slib.info, Node: Array Mapping, Next: Association Lists, Prev: Subarrays, Up: Data Structures - -7.1.3 Array Mapping | -------------------- | +File: slib.info, Node: Array Mapping, Next: Array Interpolation, Prev: Subarrays, Up: Data Structures + | +7.1.3 Array Mapping +------------------- `(require 'array-for-each)' - -- Procedure: array-map! array0 proc array1 ... | + -- Procedure: array-map! array0 proc array1 ... ARRAY1, ... must have the same number of dimensions as ARRAY0 and have a range for each index which includes the range for the corresponding index in ARRAY0. PROC is applied to each tuple of @@ -11375,7 +11577,7 @@ File: slib.info, Node: Array Mapping, Next: Association Lists, Prev: Subarray corresponding element in ARRAY0. The value returned is unspecified. The order of application is unspecified. - -- Function: array-map prototype proc array1 array2 ... | + -- Function: array-map prototype proc array1 array2 ... ARRAY2, ... must have the same number of dimensions as ARRAY1 and have a range for each index which includes the range for the corresponding index in ARRAY1. PROC is applied to each tuple of @@ -11383,23 +11585,23 @@ File: slib.info, Node: Array Mapping, Next: Association Lists, Prev: Subarray corresponding element in a new array of type PROTOTYPE. The new array is returned. The order of application is unspecified. - -- Function: array-for-each proc array0 ... | + -- Function: array-for-each proc array0 ... PROC is applied to each tuple of elements of ARRAY0 ... in row-major order. The value returned is unspecified. - -- Function: array-indexes array | + -- Function: array-indexes array Returns an array of lists of indexes for ARRAY such that, if LI is a list of indexes for which ARRAY is defined, (equal? LI (apply array-ref (array-indexes ARRAY) LI)). - -- Procedure: array-index-map! array proc | + -- Procedure: array-index-map! array proc applies PROC to the indices of each element of ARRAY in turn, storing the result in the corresponding element. The value returned and the order of application are unspecified. One can implement ARRAY-INDEXES as (define (array-indexes array) - (let ((ra (apply make-array '#() (array-dimensions array)))) | + (let ((ra (apply make-array '#() (array-dimensions array)))) (array-index-map! ra (lambda x x)) ra)) Another example: @@ -11408,17 +11610,48 @@ File: slib.info, Node: Array Mapping, Next: Association Lists, Prev: Subarray (array-index-map! v (lambda (i) i)) v)) - -- Procedure: array:copy! destination source | + -- Procedure: array:copy! destination source Copies every element from vector or array SOURCE to the corresponding element of DESTINATION. DESTINATION must have the same rank as SOURCE, and be at least as large in each dimension. The order of copying is unspecified. -File: slib.info, Node: Association Lists, Next: Byte, Prev: Array Mapping, Up: Data Structures - -7.1.4 Association Lists | ------------------------ | +File: slib.info, Node: Array Interpolation, Next: Association Lists, Prev: Array Mapping, Up: Data Structures + | +7.1.4 Array Interpolation | +------------------------- | + | +`(require 'array-interpolate)' | + | + -- Function: interpolate-array-ref ra x1 ... xj | + RA must be an array of rank j containing numbers. | + `interpolate-array-ref' returns a value interpolated from the | + nearest j-dimensional cube of elements of RA. | + | + (interpolate-array-ref '#2A:fixZ32b((1 2 3) (4 5 6)) 1 0.1) | + ==> 4.1 | + (interpolate-array-ref '#2A:fixZ32b((1 2 3) (4 5 6)) 0.5 0.25) | + ==> 2.75 | + | + -- Procedure: resample-array! ra1 ra2 | + RA1 and RA2 must be numeric arrays of equal rank. | + `resample-array!' sets RA1 to values interpolated from RA2 such | + that the values of elements at the corners of RA1 and RA2 are | + equal. | + | + (define ra (make-array (A:fixZ32b) 2 2)) | + (resample-array! ra '#2A:fixZ32b((1 2 3) (4 5 6))) | + ra ==> #2A:fixZ32b((1 3) (4 6)) | + (define ra (make-array (A:floR64b) 3 2)) | + (resample-array! ra '#2A:fixZ32b((1 2 3) (4 5 6))) | + ra ==> #2A:floR64b((1.0 3.0) (2.5 4.5) (4.0 6.0)) | + | + +File: slib.info, Node: Association Lists, Next: Byte, Prev: Array Interpolation, Up: Data Structures + | +7.1.5 Association Lists | +----------------------- `(require 'alist)' @@ -11430,18 +11663,18 @@ symmetric, and transitive. Alist functions can be used with a secondary index method such as hash tables for improved performance. - -- Function: predicate->asso pred | - Returns an "association function" (like `assq', `assv', or `assoc') | - corresponding to PRED. The returned function returns a key-value | - pair whose key is `pred'-equal to its first argument or `#f' if no | - key in the alist is PRED-equal to the first argument. | + -- Function: predicate->asso pred + Returns an "association function" (like `assq', `assv', or `assoc') + corresponding to PRED. The returned function returns a key-value + pair whose key is `pred'-equal to its first argument or `#f' if no + key in the alist is PRED-equal to the first argument. - -- Function: alist-inquirer pred | + -- Function: alist-inquirer pred Returns a procedure of 2 arguments, ALIST and KEY, which returns the value associated with KEY in ALIST or `#f' if KEY does not appear in ALIST. - -- Function: alist-associator pred | + -- Function: alist-associator pred Returns a procedure of 3 arguments, ALIST, KEY, and VALUE, which returns an alist with KEY and VALUE associated. Any previous value associated with KEY will be lost. This returned procedure @@ -11452,7 +11685,7 @@ tables for improved performance. (define alist '()) (set! alist (put alist "Foo" 9)) - -- Function: alist-remover pred | + -- Function: alist-remover pred Returns a procedure of 2 arguments, ALIST and KEY, which returns an alist with an association whose KEY is key removed. This returned procedure may or may not have side effects on its ALIST @@ -11461,20 +11694,20 @@ tables for improved performance. (define rem (alist-remover string-ci=?)) (set! alist (rem alist "foo")) - -- Function: alist-map proc alist | + -- Function: alist-map proc alist Returns a new association list formed by mapping PROC over the keys and values of ALIST. PROC must be a function of 2 arguments which returns the new value part. - -- Function: alist-for-each proc alist | + -- Function: alist-for-each proc alist Applies PROC to each pair of keys and values of ALIST. PROC must be a function of 2 arguments. The returned value is unspecified. File: slib.info, Node: Byte, Next: Byte/Number Conversions, Prev: Association Lists, Up: Data Structures -7.1.5 Byte | ----------- | +7.1.6 Byte | +---------- `(require 'byte)' @@ -11483,46 +11716,46 @@ Using Scheme strings to implement these arrays is not portable vis-a-vis the correspondence between integers and characters and non-ascii character sets. These functions abstract the notion of a "byte". - -- Function: byte-ref bytes k | + -- Function: byte-ref bytes k K must be a valid index of BYTES. `byte-ref' returns byte K of BYTES using zero-origin indexing. - -- Procedure: byte-set! bytes k byte | + -- Procedure: byte-set! bytes k byte K must be a valid index of BYTES, and BYTE must be a small nonnegative integer. `byte-set!' stores BYTE in element K of BYTES and returns an unspecified value. - -- Function: make-bytes k byte | - -- Function: make-bytes k | + -- Function: make-bytes k byte + -- Function: make-bytes k `make-bytes' returns a newly allocated byte-array of length K. If BYTE is given, then all elements of the byte-array are initialized to BYTE, otherwise the contents of the byte-array are unspecified. - -- Function: bytes-length bytes | + -- Function: bytes-length bytes `bytes-length' returns length of byte-array BYTES. - -- Function: bytes byte ... | + -- Function: bytes byte ... Returns a newly allocated byte-array composed of the small nonnegative arguments. - -- Function: bytes->list bytes | + -- Function: bytes->list bytes `bytes->list' returns a newly allocated list of the bytes that make up the given byte-array. - -- Function: list->bytes bytes | + -- Function: list->bytes bytes `list->bytes' returns a newly allocated byte-array formed from the small nonnegative integers in the list BYTES. `Bytes->list' and `list->bytes' are inverses so far as `equal?' is concerned. - -- Function: bytes-copy bytes | + -- Function: bytes-copy bytes Returns a newly allocated copy of the given BYTES. - -- Procedure: bytes-reverse! bytes | + -- Procedure: bytes-reverse! bytes Reverses the order of byte-array BYTES. - -- Function: bytes-reverse bytes | + -- Function: bytes-reverse bytes Returns a newly allocated bytes-array consisting of the elements of BYTES in reverse order. @@ -11531,15 +11764,15 @@ Input and output of bytes should be with ports opened in "binary" mode argument will return a binary port if the Scheme implementation supports it. - -- Function: write-byte byte port | - -- Function: write-byte byte | + -- Function: write-byte byte port + -- Function: write-byte byte Writes the byte BYTE (not an external representation of the byte) to the given PORT and returns an unspecified value. The PORT argument may be omitted, in which case it defaults to the value returned by `current-output-port'. - -- Function: read-byte port | - -- Function: read-byte | + -- Function: read-byte port + -- Function: read-byte Returns the next byte available from the input PORT, updating the PORT to point to the following byte. If no more bytes are available, an end-of-file object is returned. PORT may be @@ -11556,8 +11789,8 @@ Once read in, SLIB treats byte sequences as big-endian. The multi-byte sequences produced and used by number conversion routines *note Byte/Number Conversions:: are always big-endian. - -- Function: read-bytes n port | - -- Function: read-bytes n | + -- Function: read-bytes n port + -- Function: read-bytes n `read-bytes' returns a newly allocated bytes-array filled with `(abs N)' bytes read from PORT. If N is positive, then the first byte read is stored at index 0; otherwise the last byte read is @@ -11567,8 +11800,8 @@ Byte/Number Conversions:: are always big-endian. PORT may be omitted, in which case it defaults to the value returned by `current-input-port'. - -- Function: write-bytes bytes n port | - -- Function: write-bytes bytes n | + -- Function: write-bytes bytes n port + -- Function: write-bytes bytes n `write-bytes' writes `(abs N)' bytes to output-port PORT. If N is positive, then the first byte written is index 0 of BYTES; otherwise the last byte written is index 0 of BYTES. @@ -11581,8 +11814,8 @@ Byte/Number Conversions:: are always big-endian. for reading and writing blocks of bytes. The relative size of START and END determines the order of writing. - -- Procedure: substring-read! string start end port | - -- Procedure: substring-read! string start end | + -- Procedure: substring-read! string start end port + -- Procedure: substring-read! string start end Fills STRING with up to `(abs (- START END))' bytes read from PORT. The first byte read is stored at index STRING. `substring-read!' returns the number of bytes read. @@ -11590,8 +11823,8 @@ and END determines the order of writing. PORT may be omitted, in which case it defaults to the value returned by `current-input-port'. - -- Function: substring-write string start end port | - -- Function: substring-write string start end | + -- Function: substring-write string start end port + -- Function: substring-write string start end `substring-write' writes `(abs (- START END))' bytes to output-port PORT. The first byte written is index START of STRING. `substring-write' returns the number of bytes written. @@ -11602,8 +11835,8 @@ and END determines the order of writing. File: slib.info, Node: Byte/Number Conversions, Next: MAT-File Format, Prev: Byte, Up: Data Structures -7.1.6 Byte/Number Conversions | ------------------------------ | +7.1.7 Byte/Number Conversions | +----------------------------- `(require 'byte-number)' @@ -11615,7 +11848,7 @@ read-bytes: Byte. The sign of the length argument to bytes/integer conversion procedures determines the signedness of the number. - -- Function: bytes->integer bytes n | + -- Function: bytes->integer bytes n Converts the first `(abs N)' bytes of big-endian BYTES array to an integer. If N is negative then the integer coded by the bytes are treated as two's-complement (can be negative). @@ -11627,7 +11860,7 @@ determines the signedness of the number. (bytes->integer (bytes 128 0 0 0) -4) => -2147483648 (bytes->integer (bytes 128 0 0 0) 4) => 2147483648 - -- Function: integer->bytes n len | + -- Function: integer->bytes n len Converts the integer N to a byte-array of `(abs N)' bytes. If N and LEN are both negative, then the bytes in the returned array are coded two's-complement. @@ -11639,11 +11872,13 @@ determines the signedness of the number. (bytes->list (integer->bytes -2147483648 -4)) => (128 0 0 0) (bytes->list (integer->bytes 2147483648 4)) => (128 0 0 0) - -- Function: bytes->ieee-float bytes | + -- Function: bytes->ieee-float bytes BYTES must be a 4-element byte-array. `bytes->ieee-float' calculates and returns the value of BYTES interpreted as a big-endian IEEE 4-byte (32-bit) number. + (bytes->ieee-float (bytes 0 0 0 0)) => 0.0 | + (bytes->ieee-float (bytes #x80 0 0 0)) => -0.0 | (bytes->ieee-float (bytes #x40 0 0 0)) => 2.0 (bytes->ieee-float (bytes #x40 #xd0 0 0)) => 6.5 (bytes->ieee-float (bytes #xc0 #xd0 0 0)) => -6.5 @@ -11652,17 +11887,18 @@ determines the signedness of the number. (bytes->ieee-float (bytes 0 #x40 0 0)) => 5.877471754111437e-39 (bytes->ieee-float (bytes 0 0 0 1)) => 1.401298464324817e-45 - (bytes->ieee-float (bytes #xff #x80 0 0)) => -1/0 - (bytes->ieee-float (bytes #x7f #x80 0 0)) => 1/0 + (bytes->ieee-float (bytes #xff #x80 0 0)) => -inf.0 | + (bytes->ieee-float (bytes #x7f #x80 0 0)) => +inf.0 | (bytes->ieee-float (bytes #x7f #x80 0 1)) => 0/0 - -- Function: bytes->ieee-double bytes | + -- Function: bytes->ieee-double bytes BYTES must be a 8-element byte-array. `bytes->ieee-double' calculates and returns the value of BYTES interpreted as a big-endian IEEE 8-byte (64-bit) number. (bytes->ieee-double (bytes 0 0 0 0 0 0 0 0)) => 0.0 - (bytes->ieee-double (bytes #x40 0 0 0 0 0 0 0)) => 2 + (bytes->ieee-double (bytes #x80 0 0 0 0 0 0 0)) => -0.0 | + (bytes->ieee-double (bytes #x40 0 0 0 0 0 0 0)) => 2.0 | (bytes->ieee-double (bytes #x40 #x1A 0 0 0 0 0 0)) => 6.5 (bytes->ieee-double (bytes #xC0 #x1A 0 0 0 0 0 0)) => -6.5 @@ -11670,14 +11906,16 @@ determines the signedness of the number. (bytes->ieee-double (bytes 0 4 0 0 0 0 0 0)) => 5.562684646268003e-309 (bytes->ieee-double (bytes 0 0 0 0 0 0 0 1)) => 4.0e-324 - (bytes->ieee-double (bytes #xFF #xF0 0 0 0 0 0 0)) => -1/0 - (bytes->ieee-double (bytes #x7F #xF0 0 0 0 0 0 0)) => 1/0 + (bytes->ieee-double (bytes #xFF #xF0 0 0 0 0 0 0)) => -inf.0 | + (bytes->ieee-double (bytes #x7F #xF0 0 0 0 0 0 0)) => +inf.0 | (bytes->ieee-double (bytes #x7F #xF8 0 0 0 0 0 0)) => 0/0 - -- Function: ieee-float->bytes x | + -- Function: ieee-float->bytes x Returns a 4-element byte-array encoding the IEEE single-precision floating-point of X. + (bytes->list (ieee-float->bytes 0.0)) => (0 0 0 0) + (bytes->list (ieee-float->bytes -0.0)) => (128 0 0 0) (bytes->list (ieee-float->bytes 2.0)) => (64 0 0 0) (bytes->list (ieee-float->bytes 6.5)) => (64 208 0 0) (bytes->list (ieee-float->bytes -6.5)) => (192 208 0 0) @@ -11686,14 +11924,16 @@ determines the signedness of the number. (bytes->list (ieee-float->bytes 5.877471754111438e-39)) => ( 0 64 0 0) (bytes->list (ieee-float->bytes 1.401298464324817e-45)) => ( 0 0 0 1) - (bytes->list (ieee-float->bytes -1/0)) => (255 128 0 0) - (bytes->list (ieee-float->bytes 1/0)) => (127 128 0 0) + (bytes->list (ieee-float->bytes -inf.0)) => (255 128 0 0) + (bytes->list (ieee-float->bytes +inf.0)) => (127 128 0 0) (bytes->list (ieee-float->bytes 0/0)) => (127 128 0 1) - -- Function: ieee-double->bytes x | + -- Function: ieee-double->bytes x Returns a 8-element byte-array encoding the IEEE double-precision floating-point of X. + (bytes->list (ieee-double->bytes 0.0)) => (0 0 0 0 0 0 0 0) | + (bytes->list (ieee-double->bytes -0.0)) => (128 0 0 0 0 0 0 0) | (bytes->list (ieee-double->bytes 2.0)) => (64 0 0 0 0 0 0 0) (bytes->list (ieee-double->bytes 6.5)) => (64 26 0 0 0 0 0 0) (bytes->list (ieee-double->bytes -6.5)) => (192 26 0 0 0 0 0 0) @@ -11705,8 +11945,8 @@ determines the signedness of the number. (bytes->list (ieee-double->bytes 4.0e-324)) => ( 0 0 0 0 0 0 0 1) - (bytes->list (ieee-double->bytes -1/0)) => (255 240 0 0 0 0 0 0) - (bytes->list (ieee-double->bytes 1/0)) => (127 240 0 0 0 0 0 0) + (bytes->list (ieee-double->bytes -inf.0)) => (255 240 0 0 0 0 0 0) | + (bytes->list (ieee-double->bytes +inf.0)) => (127 240 0 0 0 0 0 0) | (bytes->list (ieee-double->bytes 0/0)) => (127 248 0 0 0 0 0 0) Byte Collation Order @@ -11721,40 +11961,40 @@ byte-collating order to work for their entire ranges. This agreement enables the full range of numbers as keys in "indexed-sequential-access-method" databases. - -- Procedure: integer-byte-collate! byte-vector | + -- Procedure: integer-byte-collate! byte-vector Modifies sign bit of BYTE-VECTOR so that `string<?' ordering of two's-complement byte-vectors matches numerical order. `integer-byte-collate!' returns BYTE-VECTOR and is its own functional inverse. - -- Function: integer-byte-collate byte-vector | + -- Function: integer-byte-collate byte-vector Returns copy of BYTE-VECTOR with sign bit modified so that `string<?' ordering of two's-complement byte-vectors matches numerical order. `integer-byte-collate' is its own functional inverse. - -- Procedure: ieee-byte-collate! byte-vector | + -- Procedure: ieee-byte-collate! byte-vector Modifies BYTE-VECTOR so that `string<?' ordering of IEEE floating-point byte-vectors matches numerical order. `ieee-byte-collate!' returns BYTE-VECTOR. - -- Procedure: ieee-byte-decollate! byte-vector | + -- Procedure: ieee-byte-decollate! byte-vector Given BYTE-VECTOR modified by `IEEE-byte-collate!', reverses the BYTE-VECTOR modifications. - -- Function: ieee-byte-collate byte-vector | + -- Function: ieee-byte-collate byte-vector Returns copy of BYTE-VECTOR encoded so that `string<?' ordering of IEEE floating-point byte-vectors matches numerical order. - -- Function: ieee-byte-decollate byte-vector | + -- Function: ieee-byte-decollate byte-vector Given BYTE-VECTOR returned by `IEEE-byte-collate', reverses the BYTE-VECTOR modifications. File: slib.info, Node: MAT-File Format, Next: Portable Image Files, Prev: Byte/Number Conversions, Up: Data Structures -7.1.7 MAT-File Format | ---------------------- | +7.1.8 MAT-File Format | +--------------------- `(require 'matfile)' @@ -11765,16 +12005,16 @@ files. MAT-files written from big-endian or little-endian computers having IEEE format numbers are currently supported. Support for files written from VAX or Cray machines could also be added. -The numeric and text matrix types handled; support for "sparse" matrices | -awaits a sample file. | +The numeric and text matrix types handled; support for "sparse" matrices +awaits a sample file. - -- Function: matfile:read filename | + -- Function: matfile:read filename FILENAME should be a string naming an existing file containing a MATLAB Version 4 MAT-File. The `matfile:read' procedure reads matrices from the file and returns a list of the results; a list of the name string and array for each matrix. - -- Function: matfile:load filename | + -- Function: matfile:load filename FILENAME should be a string naming an existing file containing a MATLAB Version 4 MAT-File. The `matfile:load' procedure reads matrices from the file and defines the `string-ci->symbol' for @@ -11784,14 +12024,14 @@ awaits a sample file. | File: slib.info, Node: Portable Image Files, Next: Collections, Prev: MAT-File Format, Up: Data Structures -7.1.8 Portable Image Files | --------------------------- | +7.1.9 Portable Image Files | +-------------------------- `(require 'pnm)' - -- Function: pnm:type-dimensions path | + -- Function: pnm:type-dimensions path The string PATH must name a "portable bitmap graphics" file. `pnm:type-dimensions' - returns a list of 4 items: | + returns a list of 4 items: 1. A symbol describing the type of the file named by PATH. 2. The image width in pixels. @@ -11815,16 +12055,16 @@ File: slib.info, Node: Portable Image Files, Next: Collections, Prev: MAT-Fil RGB (full color) image; red, green, and blue interleaved pixel values are from 0 to MAXVAL - -- Function: pnm:image-file->array path array | - Reads the "portable bitmap graphics" file named by PATH into ARRAY. | - ARRAY must be the correct size and type for PATH. ARRAY is | - returned. | + -- Function: pnm:image-file->array path array + Reads the "portable bitmap graphics" file named by PATH into ARRAY. + ARRAY must be the correct size and type for PATH. ARRAY is + returned. - -- Function: pnm:image-file->array path | + -- Function: pnm:image-file->array path `pnm:image-file->array' creates and returns an array with the "portable bitmap graphics" file named by PATH read into it. - -- Function: pnm:array-write type array maxval path comment ... | + -- Function: pnm:array-write type array maxval path comment ... Writes the contents of ARRAY to a TYPE image file named PATH. The file will have pixel values between 0 and MAXVAL, which must be compatible with TYPE. For `pbm' files, MAXVAL must be `1'. @@ -11833,8 +12073,8 @@ File: slib.info, Node: Portable Image Files, Next: Collections, Prev: MAT-Fil File: slib.info, Node: Collections, Next: Dynamic Data Type, Prev: Portable Image Files, Up: Data Structures -7.1.9 Collections | ------------------ | +7.1.10 Collections | +------------------ | `(require 'collect)' @@ -11865,12 +12105,12 @@ Yasos::). They must support the following operations: They might support specialized `for-each-key' and `for-each-elt' operations. - -- Function: collection? obj | + -- Function: collection? obj A predicate, true initially of lists, vectors and strings. New sorts of collections must answer `#t' to `collection?'. - -- Procedure: map-elts proc collection1 ... | - -- Procedure: do-elts proc collection1 ... | + -- Procedure: map-elts proc collection1 ... + -- Procedure: do-elts proc collection1 ... PROC is a procedure taking as many arguments as there are COLLECTIONS (at least one). The COLLECTIONS are iterated over in their natural order and PROC is applied to the elements yielded by @@ -11885,8 +12125,8 @@ operations. (map-elts + (list 1 2 3) (vector 1 2 3)) => #(2 4 6) - -- Procedure: map-keys proc collection1 ... | - -- Procedure: do-keys proc collection1 ... | + -- Procedure: map-keys proc collection1 ... + -- Procedure: do-keys proc collection1 ... These are analogous to `map-elts' and `do-elts', but each iteration is over the COLLECTIONS' _keys_ rather than their elements. @@ -11895,12 +12135,12 @@ operations. (map-keys + (list 1 2 3) (vector 1 2 3)) => #(0 2 4) - -- Procedure: for-each-key collection proc | - -- Procedure: for-each-elt collection proc | + -- Procedure: for-each-key collection proc + -- Procedure: for-each-elt collection proc These are like `do-keys' and `do-elts' but only for a single collection; they are potentially more efficient. - -- Function: reduce proc seed collection1 ... | + -- Function: reduce proc seed collection1 ... A generalization of the list-based `reduce-init' (*note Lists as sequences::) to collections which will shadow the list-based version if `(require 'collect)' follows `(require @@ -11912,7 +12152,7 @@ operations. (reduce union '() '((a b c) (b c d) (d a))) => (c b d a). - -- Function: any? pred collection1 ... | + -- Function: any? pred collection1 ... A generalization of the list-based `some' (*note Lists as sequences::) to collections. @@ -11920,7 +12160,7 @@ operations. (any? odd? (list 2 3 4 5)) => #t - -- Function: every? pred collection1 ... | + -- Function: every? pred collection1 ... A generalization of the list-based `every' (*note Lists as sequences::) to collections. @@ -11928,15 +12168,15 @@ operations. (every? collection? '((1 2) #(1 2))) => #t - -- Function: empty? collection | + -- Function: empty? collection Returns `#t' iff there are no elements in COLLECTION. `(empty? COLLECTION) == (zero? (size COLLECTION))' - -- Function: size collection | + -- Function: size collection Returns the number of elements in COLLECTION. - -- Function: Setter list-ref | + -- Function: Setter list-ref See *Note Setters:: for a definition of "setter". N.B. `(setter list-ref)' doesn't work properly for element 0 of a list. @@ -12002,28 +12242,28 @@ operations. File: slib.info, Node: Dynamic Data Type, Next: Hash Tables, Prev: Collections, Up: Data Structures -7.1.10 Dynamic Data Type | ------------------------- | +7.1.11 Dynamic Data Type | +------------------------ `(require 'dynamic)' - -- Function: make-dynamic obj | + -- Function: make-dynamic obj Create and returns a new "dynamic" whose global value is OBJ. - -- Function: dynamic? obj | + -- Function: dynamic? obj Returns true if and only if OBJ is a dynamic. No object satisfying `dynamic?' satisfies any of the other standard type predicates. - -- Function: dynamic-ref dyn | + -- Function: dynamic-ref dyn Return the value of the given dynamic in the current dynamic environment. - -- Procedure: dynamic-set! dyn obj | + -- Procedure: dynamic-set! dyn obj Change the value of the given dynamic to OBJ in the current dynamic environment. The returned value is unspecified. - -- Function: call-with-dynamic-binding dyn obj thunk | + -- Function: call-with-dynamic-binding dyn obj thunk Invoke and return the value of the given thunk in a new, nested dynamic environment in which the given dynamic has been bound to a new location whose initial contents are the value OBJ. This @@ -12037,12 +12277,12 @@ File: slib.info, Node: Dynamic Data Type, Next: Hash Tables, Prev: Collection File: slib.info, Node: Hash Tables, Next: Object, Prev: Dynamic Data Type, Up: Data Structures -7.1.11 Hash Tables | ------------------- | +7.1.12 Hash Tables | +------------------ `(require 'hash-table)' - -- Function: predicate->hash pred | + -- Function: predicate->hash pred Returns a hash function (like `hashq', `hashv', or `hash') corresponding to the equality predicate PRED. PRED should be `eq?', `eqv?', `equal?', `=', `char=?', `char-ci=?', `string=?', or @@ -12050,7 +12290,7 @@ File: slib.info, Node: Hash Tables, Next: Object, Prev: Dynamic Data Type, U A hash table is a vector of association lists. - -- Function: make-hash-table k | + -- Function: make-hash-table k Returns a vector of K empty (association) lists. Hash table functions provide utilities for an associative database. @@ -12058,38 +12298,38 @@ These functions take an equality predicate, PRED, as an argument. PRED should be `eq?', `eqv?', `equal?', `=', `char=?', `char-ci=?', `string=?', or `string-ci=?'. - -- Function: predicate->hash-asso pred | + -- Function: predicate->hash-asso pred Returns a hash association function of 2 arguments, KEY and HASHTAB, corresponding to PRED. The returned function returns a key-value pair whose key is PRED-equal to its first argument or `#f' if no key in HASHTAB is PRED-equal to the first argument. - -- Function: hash-inquirer pred | + -- Function: hash-inquirer pred Returns a procedure of 2 arguments, HASHTAB and KEY, which returns the value associated with KEY in HASHTAB or `#f' if KEY does not appear in HASHTAB. - -- Function: hash-associator pred | + -- Function: hash-associator pred Returns a procedure of 3 arguments, HASHTAB, KEY, and VALUE, which modifies HASHTAB so that KEY and VALUE associated. Any previous value associated with KEY will be lost. - -- Function: hash-remover pred | + -- Function: hash-remover pred Returns a procedure of 2 arguments, HASHTAB and KEY, which modifies HASHTAB so that the association whose key is KEY is removed. - -- Function: hash-map proc hash-table | + -- Function: hash-map proc hash-table Returns a new hash table formed by mapping PROC over the keys and values of HASH-TABLE. PROC must be a function of 2 arguments which returns the new value part. - -- Function: hash-for-each proc hash-table | + -- Function: hash-for-each proc hash-table Applies PROC to each pair of keys and values of HASH-TABLE. PROC must be a function of 2 arguments. The returned value is unspecified. - -- Function: hash-rehasher pred | + -- Function: hash-rehasher pred `hash-rehasher' accepts a hash table predicate and returns a function of two arguments HASHTAB and NEW-K which is specialized for that predicate. @@ -12102,8 +12342,8 @@ should be `eq?', `eqv?', `equal?', `=', `char=?', `char-ci=?', File: slib.info, Node: Object, Next: Priority Queues, Prev: Hash Tables, Up: Data Structures -7.1.12 Macroless Object System | ------------------------------- | +7.1.13 Macroless Object System | +------------------------------ `(require 'object)' @@ -12111,8 +12351,8 @@ File: slib.info, Node: Object, Next: Priority Queues, Prev: Hash Tables, Up: (whumeniu@datap.ca). Conceptual Tributes: *Note Yasos::, MacScheme's %object, CLOS, Lack of R4RS macros. -7.1.13 Concepts | ---------------- | +7.1.14 Concepts | +--------------- OBJECT An object is an ordered association-list (by `eq?') of methods @@ -12141,10 +12381,10 @@ PREDICATE A object's method asscociated with a generic-predicate. Returns `#t'. -7.1.14 Procedures | ------------------ | +7.1.15 Procedures | +----------------- - -- Function: make-object ancestor ... | + -- Function: make-object ancestor ... Returns an object. Current object implementation is a tagged vector. ANCESTORs are optional and must be objects in terms of object?. ANCESTORs methods are included in the object. Multiple @@ -12152,37 +12392,37 @@ PREDICATE In this case the method of the ANCESTOR first appearing in the list is the one returned by `get-method'. - -- Function: object? obj | + -- Function: object? obj Returns boolean value whether OBJ was created by make-object. - -- Function: make-generic-method exception-procedure | + -- Function: make-generic-method exception-procedure Returns a procedure which be associated with an object's methods. If EXCEPTION-PROCEDURE is specified then it is used to process non-objects. - -- Function: make-generic-predicate | + -- Function: make-generic-predicate Returns a boolean procedure for any scheme object. - -- Function: make-method! object generic-method method | + -- Function: make-method! object generic-method method Associates METHOD to the GENERIC-METHOD in the object. The METHOD overrides any previous association with the GENERIC-METHOD within the object. Using `unmake-method!' will restore the object's previous association with the GENERIC-METHOD. METHOD must be a procedure. - -- Function: make-predicate! object generic-preciate | + -- Function: make-predicate! object generic-preciate Makes a predicate method associated with the GENERIC-PREDICATE. - -- Function: unmake-method! object generic-method | + -- Function: unmake-method! object generic-method Removes an object's association with a GENERIC-METHOD . - -- Function: get-method object generic-method | + -- Function: get-method object generic-method Returns the object's method associated (if any) with the GENERIC-METHOD. If no associated method exists an error is flagged. -7.1.15 Examples | ---------------- | +7.1.16 Examples | +--------------- (require 'object) @@ -12240,8 +12480,8 @@ PREDICATE (imigrate! self) self) -7.1.15.1 Inverter Documentation | -............................... | +7.1.16.1 Inverter Documentation | +............................... Inheritance: <inverter>::(<number> <description>) @@ -12253,8 +12493,8 @@ Inheritance: <inverter>::invert <inverter>::inverter? -7.1.15.2 Number Documention | -........................... | +7.1.16.2 Number Documention | +........................... Inheritance <number>::() @@ -12264,8 +12504,8 @@ Inheritance <number>::value <number>::set-value! -7.1.15.3 Inverter code | -...................... | +7.1.16.3 Inverter code | +...................... (require 'object) @@ -12328,26 +12568,26 @@ Inheritance File: slib.info, Node: Priority Queues, Next: Queues, Prev: Object, Up: Data Structures -7.1.16 Priority Queues | ----------------------- | +7.1.17 Priority Queues | +---------------------- `(require 'priority-queue)' This algorithm for priority queues is due to `Introduction to Algorithms' by T. Cormen, C. Leiserson, R. Rivest. 1989 MIT Press. - -- Function: make-heap pred<? | + -- Function: make-heap pred<? Returns a binary heap suitable which can be used for priority queue operations. - -- Function: heap-length heap | + -- Function: heap-length heap Returns the number of elements in HEAP. - -- Procedure: heap-insert! heap item | + -- Procedure: heap-insert! heap item Inserts ITEM into HEAP. ITEM can be inserted multiple times. The value returned is unspecified. - -- Procedure: heap-extract-max! heap | + -- Procedure: heap-extract-max! heap Returns the item which is larger than all others according to the PRED<? argument to `make-heap'. If there are no items in HEAP, an error is signaled. @@ -12355,8 +12595,8 @@ Algorithms' by T. Cormen, C. Leiserson, R. Rivest. 1989 MIT Press. File: slib.info, Node: Queues, Next: Records, Prev: Priority Queues, Up: Data Structures -7.1.17 Queues | -------------- | +7.1.18 Queues | +------------- `(require 'queue)' @@ -12364,50 +12604,50 @@ File: slib.info, Node: Queues, Next: Records, Prev: Priority Queues, Up: Dat rear, and removed from the front (i.e., they are what are often called "dequeues"). A queue may also be used like a stack. - -- Function: make-queue | + -- Function: make-queue Returns a new, empty queue. - -- Function: queue? obj | + -- Function: queue? obj Returns `#t' if OBJ is a queue. - -- Function: queue-empty? q | + -- Function: queue-empty? q Returns `#t' if the queue Q is empty. - -- Procedure: queue-push! q datum | + -- Procedure: queue-push! q datum Adds DATUM to the front of queue Q. - -- Procedure: enqueue! q datum | + -- Procedure: enqueue! q datum Adds DATUM to the rear of queue Q. - -- Procedure: dequeue! q | - -- Procedure: queue-pop! q | + -- Procedure: dequeue! q + -- Procedure: queue-pop! q Both of these procedures remove and return the datum at the front of the queue. `queue-pop!' is used to suggest that the queue is being used like a stack. All of the following functions raise an error if the queue Q is empty. - -- Procedure: dequeue-all! q | + -- Procedure: dequeue-all! q Removes and returns (the list) of all contents of queue Q. - -- Function: queue-front q | + -- Function: queue-front q Returns the datum at the front of the queue Q. - -- Function: queue-rear q | + -- Function: queue-rear q Returns the datum at the rear of the queue Q. File: slib.info, Node: Records, Prev: Queues, Up: Data Structures -7.1.18 Records | --------------- | +7.1.19 Records | +-------------- `(require 'record)' The Record package provides a facility for user to define their own record data types. - -- Function: make-record-type type-name field-names | + -- Function: make-record-type type-name field-names Returns a "record-type descriptor", a value representing a new data type disjoint from all others. The TYPE-NAME argument must be a string, but is only used for debugging purposes (such as the @@ -12417,7 +12657,7 @@ record data types. duplicates. It is unspecified how record-type descriptors are represented. - -- Function: record-constructor rtd [field-names] | + -- Function: record-constructor rtd [field-names] Returns a procedure for constructing new members of the type represented by RTD. The returned procedure accepts exactly as many arguments as there are symbols in the given list, @@ -12430,13 +12670,13 @@ record data types. it is an error if it contains any duplicates or any symbols not in the default list. - -- Function: record-predicate rtd | + -- Function: record-predicate rtd Returns a procedure for testing membership in the type represented by RTD. The returned procedure accepts exactly one argument and returns a true value if the argument is a member of the indicated record type; it returns a false value otherwise. - -- Function: record-accessor rtd field-name | + -- Function: record-accessor rtd field-name Returns a procedure for reading the value of a particular field of a member of the type represented by RTD. The returned procedure accepts exactly one argument which must be a record of the @@ -12445,7 +12685,7 @@ record data types. must be a member of the list of field-names in the call to `make-record-type' that created the type represented by RTD. - -- Function: record-modifier rtd field-name | + -- Function: record-modifier rtd field-name Returns a procedure for writing the value of a particular field of a member of the type represented by RTD. The returned procedure accepts exactly two arguments: first, a record of the appropriate @@ -12471,8 +12711,8 @@ supported. File: slib.info, Node: Sorting and Searching, Next: Procedures, Prev: Data Structures, Up: Other Packages -7.2 Sorting and Searching | -========================= | +7.2 Sorting and Searching +========================= * Menu: @@ -12490,8 +12730,8 @@ File: slib.info, Node: Sorting and Searching, Next: Procedures, Prev: Data St File: slib.info, Node: Common List Functions, Next: Tree Operations, Prev: Sorting and Searching, Up: Sorting and Searching -7.2.1 Common List Functions | ---------------------------- | +7.2.1 Common List Functions +--------------------------- `(require 'common-list-functions)' @@ -12509,11 +12749,11 @@ optional arguments in some cases. File: slib.info, Node: List construction, Next: Lists as sets, Prev: Common List Functions, Up: Common List Functions -7.2.1.1 List construction | -......................... | +7.2.1.1 List construction +......................... - -- Function: make-list k | - -- Function: make-list k init | + -- Function: make-list k + -- Function: make-list k init `make-list' creates and returns a list of K elements. If INIT is included, all elements in the list are initialized to INIT. @@ -12523,7 +12763,7 @@ File: slib.info, Node: List construction, Next: Lists as sets, Prev: Common L (make-list 5 'foo) => (foo foo foo foo foo) - -- Function: list* obj1 obj2 ... | + -- Function: list* obj1 obj2 ... Works like `list' except that the cdr of the last pair is the last argument unless there is only one argument, when the result is just that argument. Sometimes called `cons*'. E.g.: @@ -12537,7 +12777,7 @@ File: slib.info, Node: List construction, Next: Lists as sets, Prev: Common L (list* ARGS '()) == (list ARGS) - -- Function: copy-list lst | + -- Function: copy-list lst `copy-list' makes a copy of LST using new pairs and returns it. Only the top level of the list is copied, i.e., pairs forming elements of the copied list remain `eq?' to the corresponding @@ -12563,13 +12803,13 @@ File: slib.info, Node: List construction, Next: Lists as sets, Prev: Common L File: slib.info, Node: Lists as sets, Next: Lists as sequences, Prev: List construction, Up: Common List Functions -7.2.1.2 Lists as sets | -..................... | +7.2.1.2 Lists as sets +..................... `eqv?' is used to test for membership by procedures which treat lists as sets. - -- Function: adjoin e l | + -- Function: adjoin e l `adjoin' returns the adjoint of the element E and the list L. That is, if E is in L, `adjoin' returns L, otherwise, it returns `(cons E L)'. @@ -12580,7 +12820,7 @@ as sets. (adjoin 'foo '(bar baz bang)) => (foo bar baz bang) - -- Function: union l1 l2 | + -- Function: union l1 l2 `union' returns a list of all elements that are in L1 or L2. Duplicates between L1 and L2 are culled. Duplicates within L1 or within L2 may or may not be removed. @@ -12591,7 +12831,7 @@ as sets. (union '(0 1 2 3 4) '(3 4 5 6)) => (5 6 0 1 2 3 4) - -- Function: intersection l1 l2 | + -- Function: intersection l1 l2 `intersection' returns a list of all elements that are in both L1 and L2. @@ -12601,7 +12841,7 @@ as sets. (intersection '(1 2 3 4) '(5 6 7 8)) => () - -- Function: set-difference l1 l2 | + -- Function: set-difference l1 l2 `set-difference' returns a list of all elements that are in L1 but not in L2. @@ -12611,7 +12851,7 @@ as sets. (set-difference '(1 2 3 4) '(1 2 3 4 5 6)) => () - -- Function: subset? list1 list2 | + -- Function: subset? list1 list2 Returns `#t' if every element of LIST1 is `eqv?' an element of LIST2; otherwise returns `#f'. @@ -12621,7 +12861,7 @@ as sets. (subset? '(1 2 3 4) '(6 5 4 3 2 1 0)) => #t - -- Function: member-if pred lst | + -- Function: member-if pred lst `member-if' returns the list headed by the first element of LST to satisfy `(PRED ELEMENT)'. `Member-if' returns `#f' if PRED returns `#f' for every ELEMENT in LST. @@ -12632,7 +12872,7 @@ as sets. (member-if number? '(a 2 b 4)) => (2 b 4) - -- Function: some pred lst1 lst2 ... | + -- Function: some pred lst1 lst2 ... PRED is a boolean function of as many arguments as there are list arguments to `some' i.e., LST plus any optional arguments. PRED is applied to successive elements of the list arguments in order. @@ -12650,7 +12890,7 @@ as sets. (some > '(1 3) '(2 4)) => #f - -- Function: every pred lst1 lst2 ... | + -- Function: every pred lst1 lst2 ... `every' is analogous to `some' except it returns `#t' if every application of PRED is `#t' and `#f' otherwise. @@ -12664,11 +12904,11 @@ as sets. (every > '(2 3) '(1 4)) => #f - -- Function: notany pred lst1 ... | + -- Function: notany pred lst1 ... `notany' is analogous to `some' but returns `#t' if no application of PRED returns `#t' or `#f' as soon as any one does. - -- Function: notevery pred lst1 ... | + -- Function: notevery pred lst1 ... `notevery' is analogous to `some' but returns `#t' as soon as an application of PRED returns `#f', and `#f' otherwise. @@ -12679,17 +12919,17 @@ as sets. (notevery even? '(2 4 6 8)) => #f - -- Function: list-of?? predicate | + -- Function: list-of?? predicate Returns a predicate which returns true if its argument is a list every element of which satisfies PREDICATE. - -- Function: list-of?? predicate low-bound high-bound | + -- Function: list-of?? predicate low-bound high-bound LOW-BOUND and HIGH-BOUND are non-negative integers. `list-of??' returns a predicate which returns true if its argument is a list of length between LOW-BOUND and HIGH-BOUND (inclusive); every element of which satisfies PREDICATE. - -- Function: list-of?? predicate bound | + -- Function: list-of?? predicate bound BOUND is an integer. If BOUND is negative, `list-of??' returns a predicate which returns true if its argument is a list of length greater than `(- BOUND)'; every element of which satisfies @@ -12697,7 +12937,7 @@ as sets. returns true if its argument is a list of length less than or equal to BOUND; every element of which satisfies PREDICATE. - -- Function: find-if pred lst | + -- Function: find-if pred lst `find-if' searches for the first ELEMENT in LST such that `(PRED ELEMENT)' returns `#t'. If it finds any such ELEMENT in LST, ELEMENT is returned. Otherwise, `#f' is returned. @@ -12712,7 +12952,7 @@ as sets. (find-if symbol? '(1 2 foo bar)) => foo - -- Function: remove elt lst | + -- Function: remove elt lst `remove' removes all occurrences of ELT from LST using `eqv?' to test for equality and returns everything that's left. N.B.: other implementations (Chez, Scheme->C and T, at least) use `equal?' as @@ -12725,7 +12965,7 @@ as sets. (remove 'foo '(bar baz bang)) => (bar baz bang) - -- Function: remove-if pred lst | + -- Function: remove-if pred lst `remove-if' removes all ELEMENTs from LST where `(PRED ELEMENT)' is `#t' and returns everything that's left. @@ -12736,7 +12976,7 @@ as sets. (remove-if even? '(1 2 3 4 5 6 7 8)) => (1 3 5 7) - -- Function: remove-if-not pred lst | + -- Function: remove-if-not pred lst `remove-if-not' removes all ELEMENTs from LST for which `(PRED ELEMENT)' is `#f' and returns everything that's left. @@ -12746,7 +12986,7 @@ as sets. (remove-if-not odd? '(1 2 3 4 5 6 7 8)) => (1 3 5 7) - -- Function: has-duplicates? lst | + -- Function: has-duplicates? lst returns `#t' if 2 members of LST are `equal?', `#f' otherwise. Example: @@ -12758,7 +12998,7 @@ as sets. The procedure `remove-duplicates' uses `member' (rather than `memv'). - -- Function: remove-duplicates lst | + -- Function: remove-duplicates lst returns a copy of LST with its duplicate members removed. Elements are considered duplicate if they are `equal?'. @@ -12772,10 +13012,10 @@ as sets. File: slib.info, Node: Lists as sequences, Next: Destructive list operations, Prev: Lists as sets, Up: Common List Functions -7.2.1.3 Lists as sequences | -.......................... | +7.2.1.3 Lists as sequences +.......................... - -- Function: position obj lst | + -- Function: position obj lst `position' returns the 0-based position of OBJ in LST, or `#f' if OBJ does not occur in LST. @@ -12787,7 +13027,7 @@ File: slib.info, Node: Lists as sequences, Next: Destructive list operations, (position 'oops '(foo bar baz bang)) => #f - -- Function: reduce p lst | + -- Function: reduce p lst `reduce' combines all the elements of a sequence using a binary operation (the combination is left-associative). For example, using `+', one can add up all the elements. `reduce' allows you to @@ -12829,7 +13069,7 @@ File: slib.info, Node: Lists as sequences, Next: Destructive list operations, (lambda (args) (reduce-init (commute cons) '() args))) - -- Function: reduce-init p init lst | + -- Function: reduce-init p init lst `reduce-init' is the same as reduce, except that it implicitly inserts INIT at the start of the list. `reduce-init' is preferred if you want to handle the null list, the one-element, and lists @@ -12879,7 +13119,7 @@ File: slib.info, Node: Lists as sequences, Next: Destructive list operations, == (insert (1 1 3 4) 5) => (1 1 3 4 5) - -- Function: last lst n | + -- Function: last lst n `last' returns the last N elements of LST. N must be a non-negative integer. @@ -12889,7 +13129,7 @@ File: slib.info, Node: Lists as sequences, Next: Destructive list operations, (last '(1 2 3) 0) => 0 - -- Function: butlast lst n | + -- Function: butlast lst n `butlast' returns all but the last N elements of LST. Example: @@ -12899,13 +13139,13 @@ File: slib.info, Node: Lists as sequences, Next: Destructive list operations, => () `last' and `butlast' split a list into two parts when given identical -arguments. | +arguments. (last '(a b c d e) 2) => (d e) (butlast '(a b c d e) 2) => (a b c) - -- Function: nthcdr n lst | + -- Function: nthcdr n lst `nthcdr' takes N `cdr's of LST and returns the result. Thus `(nthcdr 3 LST)' == `(cdddr LST)' @@ -12915,7 +13155,7 @@ arguments. | (nthcdr 0 '(a b c d)) => (a b c d) - -- Function: butnthcdr n lst | + -- Function: butnthcdr n lst `butnthcdr' returns all but the nthcdr N elements of LST. Example: @@ -12925,7 +13165,7 @@ arguments. | => (a b c d) `nthcdr' and `butnthcdr' split a list into two parts when given -identical arguments. | +identical arguments. (nthcdr 2 '(a b c d e)) => (c d e) (butnthcdr 2 '(a b c d e)) @@ -12934,13 +13174,13 @@ identical arguments. | File: slib.info, Node: Destructive list operations, Next: Non-List functions, Prev: Lists as sequences, Up: Common List Functions -7.2.1.4 Destructive list operations | -................................... | +7.2.1.4 Destructive list operations +................................... These procedures may mutate the list they operate on, but any such mutation is undefined. - -- Procedure: nconc args | + -- Procedure: nconc args `nconc' destructively concatenates its arguments. (Compare this with `append', which copies arguments rather than destroying them.) Sometimes called `append!' (*note Rev2 Procedures::). @@ -12968,7 +13208,7 @@ mutation is undefined. `nconc' is the same as `append!' in `sc2.scm'. - -- Procedure: nreverse lst | + -- Procedure: nreverse lst `nreverse' reverses the order of elements in LST by mutating `cdr's of the list. Sometimes called `reverse!'. @@ -12988,9 +13228,9 @@ mutation is undefined. (nreverse lst) The example should suffice to show why this is the case. - -- Procedure: delete elt lst | - -- Procedure: delete-if pred lst | - -- Procedure: delete-if-not pred lst | + -- Procedure: delete elt lst + -- Procedure: delete-if pred lst + -- Procedure: delete-if-not pred lst Destructive versions of `remove' `remove-if', and `remove-if-not'. Example: @@ -13018,10 +13258,10 @@ mutation is undefined. File: slib.info, Node: Non-List functions, Prev: Destructive list operations, Up: Common List Functions -7.2.1.5 Non-List functions | -.......................... | +7.2.1.5 Non-List functions +.......................... - -- Function: and? arg1 ... | + -- Function: and? arg1 ... `and?' checks to see if all its arguments are true. If they are, `and?' returns `#t', otherwise, `#f'. (In contrast to `and', this is a function, so all arguments are always evaluated and in an @@ -13033,7 +13273,7 @@ File: slib.info, Node: Non-List functions, Prev: Destructive list operations, (and #f 1 2) => #f - -- Function: or? arg1 ... | + -- Function: or? arg1 ... `or?' checks to see if any of its arguments are true. If any is true, `or?' returns `#t', and `#f' otherwise. (To `or' as `and?' is to `and'.) @@ -13044,7 +13284,7 @@ File: slib.info, Node: Non-List functions, Prev: Destructive list operations, (or? #f #f #f) => #f - -- Function: atom? object | + -- Function: atom? object Returns `#t' if OBJECT is not a pair and `#f' if it is pair. (Called `atom' in Common LISP.) (atom? 1) @@ -13057,17 +13297,17 @@ File: slib.info, Node: Non-List functions, Prev: Destructive list operations, File: slib.info, Node: Tree Operations, Next: Chapter Ordering, Prev: Common List Functions, Up: Sorting and Searching -7.2.2 Tree operations | ---------------------- | +7.2.2 Tree operations +--------------------- `(require 'tree)' These are operations that treat lists a representations of trees. - -- Function: subst new old tree | - -- Function: substq new old tree | - -- Function: substv new old tree | - -- Function: subst new old tree equ? | + -- Function: subst new old tree + -- Function: substq new old tree + -- Function: substv new old tree + -- Function: subst new old tree equ? `subst' makes a copy of TREE, substituting NEW for every subtree or leaf of TREE which is `equal?' to OLD and returns a modified tree. The original TREE is unchanged, but may share parts with @@ -13086,7 +13326,7 @@ File: slib.info, Node: Tree Operations, Next: Chapter Ordering, Prev: Common '((old . spice) ((old . shoes) old . pair) (old . pair))) => ((old . spice) ((old . shoes) a . cons) (a . cons)) - -- Function: copy-tree tree | + -- Function: copy-tree tree Makes a copy of the nested list structure TREE using new pairs and returns it. All levels are copied, so that none of the pairs in the tree are `eq?' to the original ones - only the leaves are. @@ -13101,8 +13341,8 @@ File: slib.info, Node: Tree Operations, Next: Chapter Ordering, Prev: Common File: slib.info, Node: Chapter Ordering, Next: Sorting, Prev: Tree Operations, Up: Sorting and Searching -7.2.3 Chapter Ordering | ----------------------- | +7.2.3 Chapter Ordering +---------------------- `(require 'chapter-order)' @@ -13111,7 +13351,7 @@ chapter numbers (or letters) in a book. Each section of the string consists of consecutive numeric or consecutive aphabetic characters of like case. - -- Function: chap:string<? string1 string2 | + -- Function: chap:string<? string1 string2 Returns #t if the first non-matching run of alphabetic upper-case or the first non-matching run of alphabetic lower-case or the first non-matching run of numeric characters of STRING1 is `string<?' @@ -13121,12 +13361,12 @@ like case. (chap:string<? "4c" "4aa") => #t (chap:string<? "Revised^{3.99}" "Revised^{4}") => #t - -- Function: chap:string>? string1 string2 | - -- Function: chap:string<=? string1 string2 | - -- Function: chap:string>=? string1 string2 | + -- Function: chap:string>? string1 string2 + -- Function: chap:string<=? string1 string2 + -- Function: chap:string>=? string1 string2 Implement the corresponding chapter-order predicates. - -- Function: chap:next-string string | + -- Function: chap:next-string string Returns the next string in the _chapter order_. If STRING has no alphabetic or numeric characters, `(string-append STRING "0")' is returnd. The argument to chap:next-string will always be @@ -13140,8 +13380,8 @@ like case. File: slib.info, Node: Sorting, Next: Topological Sort, Prev: Chapter Ordering, Up: Sorting and Searching -7.2.4 Sorting | -------------- | +7.2.4 Sorting +------------- `(require 'sort)' @@ -13224,7 +13464,7 @@ arguments which acts like `<'. For example, are suitable for use as comparison functions. Think of `(less? x y)' as saying when `x' must _not_ precede `y'. - -- Function: sorted? sequence less? | + -- Function: sorted? sequence less? Returns `#t' when the sequence argument is in non-decreasing order according to LESS? (that is, there is no adjacent pair `... x y ...' for which `(less? y x)'). @@ -13233,7 +13473,7 @@ as saying when `x' must _not_ precede `y'. pair. It is an error if the sequence is not a list, vector, or string. - -- Function: merge list1 list2 less? | + -- Function: merge list1 list2 less? This merges two lists, producing a completely new list as result. I gave serious consideration to producing a Common-LISP-compatible version. However, Common LISP's `sort' is our `sort!' (well, in @@ -13242,7 +13482,7 @@ as saying when `x' must _not_ precede `y'. bit of work anyway. I did, however, appeal to CL to determine the _order_ of the arguments. - -- Procedure: merge! list1 list2 less? | + -- Procedure: merge! list1 list2 less? Merges two lists, re-using the pairs of LIST1 and LIST2 to build the result. If the code is compiled, and LESS? constructs no new pairs, no pairs at all will be allocated. The first pair of the @@ -13255,14 +13495,14 @@ as saying when `x' must _not_ precede `y'. per iteration.) - -- Function: sort sequence less? | + -- Function: sort sequence less? Accepts either a list, vector, or string; and returns a new sequence which is sorted. The new sequence is the same type as the input. Always `(sorted? (sort sequence less?) less?)'. The original sequence is not altered in any way. The new sequence shares its _elements_ with the old one; no elements are copied. - -- Procedure: sort! sequence less? | + -- Procedure: sort! sequence less? Returns its sorted result in the original boxes. If the original sequence is a list, no new storage is allocated at all. If the original sequence is a vector or string, the sorted elements are @@ -13288,16 +13528,16 @@ A simple device for obtaining the same expressiveness is to define File: slib.info, Node: Topological Sort, Next: Hashing, Prev: Sorting, Up: Sorting and Searching -7.2.5 Topological Sort | ----------------------- | +7.2.5 Topological Sort +---------------------- `(require 'topological-sort)' or `(require 'tsort)' The algorithm is inspired by Cormen, Leiserson and Rivest (1990) `Introduction to Algorithms', chapter 23. - -- Function: tsort dag pred | - -- Function: topological-sort dag pred | + -- Function: tsort dag pred + -- Function: topological-sort dag pred where DAG is a list of sublists. The car of each sublist is a vertex. @@ -13339,17 +13579,17 @@ The algorithm is inspired by Cormen, Leiserson and Rivest (1990) File: slib.info, Node: Hashing, Next: Space-Filling Curves, Prev: Topological Sort, Up: Sorting and Searching -7.2.6 Hashing | -------------- | +7.2.6 Hashing +------------- `(require 'hash)' These hashing functions are for use in quickly classifying objects. Hash tables use these functions. - -- Function: hashq obj k | - -- Function: hashv obj k | - -- Function: hash obj k | + -- Function: hashq obj k + -- Function: hashv obj k + -- Function: hash obj k Returns an exact non-negative integer less than K. For each non-negative integer less than K there are arguments OBJ for which the hashing functions applied to OBJ and K returns that integer. @@ -13370,159 +13610,152 @@ Hash tables use these functions. File: slib.info, Node: Space-Filling Curves, Next: Soundex, Prev: Hashing, Up: Sorting and Searching -7.2.7 Space-Filling Curves | --------------------------- | +7.2.7 Space-Filling Curves +-------------------------- * Menu: -* Hilbert Space-Filling Curve:: Non-negative coordinates | -* Peano Space-Filling Curve:: Integer coordinates | +* Hilbert Space-Filling Curve:: Non-negative coordinates +* Peano Space-Filling Curve:: Integer coordinates * Sierpinski Curve:: File: slib.info, Node: Hilbert Space-Filling Curve, Next: Peano Space-Filling Curve, Prev: Space-Filling Curves, Up: Space-Filling Curves - | -7.2.7.1 Hilbert Space-Filling Curve | -................................... | + +7.2.7.1 Hilbert Space-Filling Curve +................................... `(require 'hilbert-fill)' -The "Hilbert Space-Filling Curve" is a one-to-one mapping between a | -unit line segment and an N-dimensional unit cube. This implementation | -treats the nonnegative integers either as fractional bits of a given | -width or as nonnegative integers. | +The "Hilbert Space-Filling Curve" is a one-to-one mapping between a +unit line segment and an N-dimensional unit cube. This implementation +treats the nonnegative integers either as fractional bits of a given +width or as nonnegative integers. The integer procedures map the non-negative integers to an arbitrarily large N-dimensional cube with its corner at the origin and all coordinates are non-negative. -For any exact nonnegative integer SCALAR and exact integer RANK > 2, | +For any exact nonnegative integer SCALAR and exact integer RANK > 2, (= SCALAR (hilbert-coordinates->integer (integer->hilbert-coordinates SCALAR RANK))) => #t - When treating integers as K fractional bits, | - | - (= SCALAR (hilbert-coordinates->integer | - (integer->hilbert-coordinates SCALAR RANK K)) K) | - => #t | - | - -- Function: integer->hilbert-coordinates scalar rank | + When treating integers as K fractional bits, + + (= SCALAR (hilbert-coordinates->integer + (integer->hilbert-coordinates SCALAR RANK K)) K) + => #t + + -- Function: integer->hilbert-coordinates scalar rank Returns a list of RANK integer coordinates corresponding to exact non-negative integer SCALAR. The lists returned by `integer->hilbert-coordinates' for SCALAR arguments 0 and 1 will differ in the first element. - -- Function: integer->hilbert-coordinates scalar rank k | - SCALAR must be a nonnegative integer of no more than `RANK*K' bits. | - | - `integer->hilbert-coordinates' Returns a list of RANK K-bit | - nonnegative integer coordinates corresponding to exact | - non-negative integer SCALAR. The curves generated by | - `integer->hilbert-coordinates' have the same alignment independent | - of K. | - | - -- Function: hilbert-coordinates->integer coords | - -- Function: hilbert-coordinates->integer coords k | + -- Function: integer->hilbert-coordinates scalar rank k + SCALAR must be a nonnegative integer of no more than `RANK*K' bits. + + `integer->hilbert-coordinates' Returns a list of RANK K-bit + nonnegative integer coordinates corresponding to exact + non-negative integer SCALAR. The curves generated by + `integer->hilbert-coordinates' have the same alignment independent + of K. + + -- Function: hilbert-coordinates->integer coords + -- Function: hilbert-coordinates->integer coords k Returns an exact non-negative integer corresponding to COORDS, a list of non-negative integer coordinates. -7.2.7.2 Gray code | -................. | - | -A "Gray code" is an ordering of non-negative integers in which exactly | -one bit differs between each pair of successive elements. There are | -multiple Gray codings. An n-bit Gray code corresponds to a Hamiltonian | -cycle on an n-dimensional hypercube. | - | -Gray codes find use communicating incrementally changing values between | -asynchronous agents. De-laminated Gray codes comprise the coordinates | -of Hilbert space-filling curves. | - | - -- Function: integer->gray-code k | - Converts K to a Gray code of the same `integer-length' as K. | - | - -- Function: gray-code->integer k | - Converts the Gray code K to an integer of the same | - `integer-length' as K. | - | - For any non-negative integer K, | - (eqv? k (gray-code->integer (integer->gray-code k))) | - | - -- Function: = k1 k2 | - -- Function: gray-code<? k1 k2 | - -- Function: gray-code>? k1 k2 | - -- Function: gray-code<=? k1 k2 | - -- Function: gray-code>=? k1 k2 | - These procedures return #t if their Gray code arguments are | - (respectively): equal, monotonically increasing, monotonically | - decreasing, monotonically nondecreasing, or monotonically | - nonincreasing. | - | - For any non-negative integers K1 and K2, the Gray code predicate | - of `(integer->gray-code k1)' and `(integer->gray-code k2)' will | - return the same value as the corresponding predicate of K1 and K2. | - | -7.2.7.3 Bitwise Lamination | -.......................... | - | - -- Function: bitwise-laminate k1 ... | - -- Function: bitwise-delaminate count k | - Returns an integer composed of the bits of K1 ... interlaced in | - argument order. Given K1, ... KN, the n low-order bits of the | - returned value will be the lowest-order bit of each argument. | - | - -- Function: bitwise-laminate count k | - Returns a list of COUNT integers comprised of every COUNTh bit of | - the integer K. | - | - (map (lambda (k) (number->string k 2)) | - (bitwise-delaminate 4 #x7654)) | - => ("0" "1111" "1100" "1010") | - (number->string (bitwise-laminate 0 #b1111 #b1100 #b1010) 16) | - => "7654" | - | - For any non-negative integers K and COUNT: | - (eqv? k (bitwise-laminate (bitwise-delaminate count k))) | - | - -- Function: delaminate-list count ks | - Returns a list of COUNT integers comprised of the Jth bit of the | - integers KS where J ranges from COUNT-1 to 0. | - | - (map (lambda (k) (number->string k 2)) | - (delaminate-list 4 '(7 6 5 4 0 0 0 0))) | - => ("0" "11110000" "11000000" "10100000") | - | - `delaminate-list' is its own inverse: | - (delaminate-list 8 (delaminate-list 4 '(7 6 5 4 0 0 0 0))) | - => (7 6 5 4 0 0 0 0) | +7.2.7.2 Gray code +................. + +A "Gray code" is an ordering of non-negative integers in which exactly +one bit differs between each pair of successive elements. There are +multiple Gray codings. An n-bit Gray code corresponds to a Hamiltonian +cycle on an n-dimensional hypercube. + +Gray codes find use communicating incrementally changing values between +asynchronous agents. De-laminated Gray codes comprise the coordinates +of Hilbert space-filling curves. + + -- Function: integer->gray-code k + Converts K to a Gray code of the same `integer-length' as K. + + -- Function: gray-code->integer k + Converts the Gray code K to an integer of the same + `integer-length' as K. + + For any non-negative integer K, + (eqv? k (gray-code->integer (integer->gray-code k))) + + -- Function: = k1 k2 + -- Function: gray-code<? k1 k2 + -- Function: gray-code>? k1 k2 + -- Function: gray-code<=? k1 k2 + -- Function: gray-code>=? k1 k2 + These procedures return #t if their Gray code arguments are + (respectively): equal, monotonically increasing, monotonically + decreasing, monotonically nondecreasing, or monotonically + nonincreasing. + + For any non-negative integers K1 and K2, the Gray code predicate + of `(integer->gray-code k1)' and `(integer->gray-code k2)' will + return the same value as the corresponding predicate of K1 and K2. + +7.2.7.3 Bitwise Lamination +.......................... | + -- Function: delaminate-list count ks + Returns a list of COUNT integers comprised of the Jth bit of the + integers KS where J ranges from COUNT-1 to 0. + + (map (lambda (k) (number->string k 2)) + (delaminate-list 4 '(7 6 5 4 0 0 0 0))) + => ("0" "11110000" "11000000" "10100000") + + `delaminate-list' is its own inverse: + (delaminate-list 8 (delaminate-list 4 '(7 6 5 4 0 0 0 0))) + => (7 6 5 4 0 0 0 0) + File: slib.info, Node: Peano Space-Filling Curve, Next: Sierpinski Curve, Prev: Hilbert Space-Filling Curve, Up: Space-Filling Curves + +7.2.7.4 Peano Space-Filling Curve +................................. + +`(require 'peano-fill)' | | -7.2.7.4 Peano Space-Filling Curve | -................................. | - | + -- Function: natural->peano-coordinates scalar rank | + Returns a list of RANK nonnegative integer coordinates + corresponding to exact nonnegative integer SCALAR. The lists + returned by `natural->peano-coordinates' for SCALAR arguments 0 | + and 1 will differ in the first element. + + -- Function: peano-coordinates->natural coords | + Returns an exact nonnegative integer corresponding to COORDS, a + list of nonnegative integer coordinates. + -- Function: integer->peano-coordinates scalar rank | - Returns a list of RANK nonnegative integer coordinates | - corresponding to exact nonnegative integer SCALAR. The lists | - returned by `integer->peano-coordinates' for SCALAR arguments 0 | - and 1 will differ in the first element. | + Returns a list of RANK integer coordinates corresponding to exact | + integer SCALAR. The lists returned by | + `integer->peano-coordinates' for SCALAR arguments 0 and 1 will | + differ in the first element. | | -- Function: peano-coordinates->integer coords | - Returns an exact nonnegative integer corresponding to COORDS, a | - list of nonnegative integer coordinates. | + Returns an exact integer corresponding to COORDS, a list of integer | + coordinates. | | File: slib.info, Node: Sierpinski Curve, Prev: Peano Space-Filling Curve, Up: Space-Filling Curves - | -7.2.7.5 Sierpinski Curve | -........................ | + +7.2.7.5 Sierpinski Curve +........................ `(require 'sierpinski)' - -- Function: make-sierpinski-indexer max-coordinate | + -- Function: make-sierpinski-indexer max-coordinate Returns a procedure (eg hash-function) of 2 numeric arguments which preserves _nearness_ in its mapping from NxN to N. @@ -13569,12 +13802,12 @@ File: slib.info, Node: Sierpinski Curve, Prev: Peano Space-Filling Curve, Up: File: slib.info, Node: Soundex, Next: String Search, Prev: Space-Filling Curves, Up: Sorting and Searching -7.2.8 Soundex | -------------- | +7.2.8 Soundex +------------- `(require 'soundex)' - -- Function: soundex name | + -- Function: soundex name Computes the _soundex_ hash of NAME. Returns a string of an initial letter and up to three digits between 0 and 6. Soundex supposedly has the property that names that sound similar in normal @@ -13613,23 +13846,23 @@ File: slib.info, Node: Soundex, Next: String Search, Prev: Space-Filling Curv File: slib.info, Node: String Search, Next: Sequence Comparison, Prev: Soundex, Up: Sorting and Searching -7.2.9 String Search | -------------------- | +7.2.9 String Search +------------------- `(require 'string-search)' - -- Procedure: string-index string char | - -- Procedure: string-index-ci string char | + -- Procedure: string-index string char + -- Procedure: string-index-ci string char Returns the index of the first occurence of CHAR within STRING, or `#f' if the STRING does not contain a character CHAR. - -- Procedure: string-reverse-index string char | - -- Procedure: string-reverse-index-ci string char | + -- Procedure: string-reverse-index string char + -- Procedure: string-reverse-index-ci string char Returns the index of the last occurence of CHAR within STRING, or `#f' if the STRING does not contain a character CHAR. - -- Procedure: substring? pattern string | - -- Procedure: substring-ci? pattern string | + -- Procedure: substring? pattern string + -- Procedure: substring-ci? pattern string Searches STRING to see if some substring of STRING is equal to PATTERN. `substring?' returns the index of the first character of the first substring of STRING that is equal to PATTERN; or `#f' if @@ -13639,18 +13872,18 @@ File: slib.info, Node: String Search, Next: Sequence Comparison, Prev: Sounde (substring? "rat" "outrage") => #f (substring? "" any-string) => 0 - -- Procedure: find-string-from-port? str in-port max-no-chars | + -- Procedure: find-string-from-port? str in-port max-no-chars Looks for a string STR within the first MAX-NO-CHARS chars of the input port IN-PORT. - -- Procedure: find-string-from-port? str in-port | + -- Procedure: find-string-from-port? str in-port When called with two arguments, the search span is limited by the end of the input stream. - -- Procedure: find-string-from-port? str in-port char | + -- Procedure: find-string-from-port? str in-port char Searches up to the first occurrence of character CHAR in STR. - -- Procedure: find-string-from-port? str in-port proc | + -- Procedure: find-string-from-port? str in-port proc Searches up to the first occurrence of the procedure PROC returning non-false when called with a character (from IN-PORT) argument. @@ -13665,19 +13898,19 @@ File: slib.info, Node: String Search, Next: Sequence Comparison, Prev: Sounde can be used even if the IN-PORT is open to a pipe or other communication channel. - -- Function: string-subst txt old1 new1 ... | + -- Function: string-subst txt old1 new1 ... Returns a copy of string TXT with all occurrences of string OLD1 in TXT replaced with NEW1; then OLD2 replaced with NEW2 .... Matches are found from the left. Matches do not overlap. - -- Function: count-newlines str | + -- Function: count-newlines str Returns the number of `#\newline' characters in string STR. File: slib.info, Node: Sequence Comparison, Prev: String Search, Up: Sorting and Searching -7.2.10 Sequence Comparison | --------------------------- | +7.2.10 Sequence Comparison +-------------------------- `(require 'diff)' @@ -13686,27 +13919,27 @@ File: slib.info, Node: Sequence Comparison, Prev: String Search, Up: Sorting S. Wu, E. Myers, U. Manber, and W. Miller, "An O(NP) Sequence Comparison Algorithm," Information Processing Letters 35, 6 (1990), 317-323. - `http://www.cs.arizona.edu/people/gene/PAPERS/np_diff.ps' | + `http://www.cs.arizona.edu/people/gene/PAPERS/np_diff.ps' The values returned by `diff:edit-length' can be used to gauge the degree of match between two sequences. -`diff:edits' and `diff:longest-common-subsequence' combine the | -algorithm with the divide-and-conquer method outlined in: | - | - E. Myers and W. Miller, | - "Optimal alignments in linear space", | - Computer Application in the Biosciences (CABIOS), 4(1):11-17, 1988. | - `http://www.cs.arizona.edu/people/gene/PAPERS/linear.ps' | +`diff:edits' and `diff:longest-common-subsequence' combine the +algorithm with the divide-and-conquer method outlined in: + + E. Myers and W. Miller, + "Optimal alignments in linear space", + Computer Application in the Biosciences (CABIOS), 4(1):11-17, 1988. + `http://www.cs.arizona.edu/people/gene/PAPERS/linear.ps' If the items being sequenced are text lines, then the computed edit-list is equivalent to the output of the "diff" utility program. If the items being sequenced are words, then it is like the lesser known "spiff" program. - -- Function: diff:longest-common-subsequence array1 array2 p-lim | - -- Function: diff:longest-common-subsequence array1 array2 | - ARRAY1 and ARRAY2 are one-dimensional arrays. | + -- Function: diff:longest-common-subsequence array1 array2 p-lim + -- Function: diff:longest-common-subsequence array1 array2 + ARRAY1 and ARRAY2 are one-dimensional arrays. The non-negative integer P-LIM, if provided, is maximum number of deletions of the shorter sequence to allow. @@ -13717,9 +13950,9 @@ known "spiff" program. of length `(quotient (- (+ len1 len2) (diff:edit-length ARRAY1 ARRAY2)) 2)' holding the longest sequence common to both ARRAYs. - -- Function: diff:edits array1 array2 p-lim | - -- Function: diff:edits array1 array2 | - ARRAY1 and ARRAY2 are one-dimensional arrays. | + -- Function: diff:edits array1 array2 p-lim + -- Function: diff:edits array1 array2 + ARRAY1 and ARRAY2 are one-dimensional arrays. The non-negative integer P-LIM, if provided, is maximum number of deletions of the shorter sequence to allow. `diff:edits' will @@ -13736,9 +13969,9 @@ known "spiff" program. K < 0 Deletes `(array-ref ARRAY2 (- -1 K))' from the sequence. - -- Function: diff:edit-length array1 array2 p-lim | - -- Function: diff:edit-length array1 array2 | - ARRAY1 and ARRAY2 are one-dimensional arrays. | + -- Function: diff:edit-length array1 array2 p-lim + -- Function: diff:edit-length array1 array2 + ARRAY1 and ARRAY2 are one-dimensional arrays. The non-negative integer P-LIM, if provided, is maximum number of deletions of the shorter sequence to allow. `diff:edit-length' @@ -13747,21 +13980,21 @@ known "spiff" program. `diff:edit-length' returns the length of the shortest sequence of edits transformaing ARRAY1 to ARRAY2. - (diff:longest-common-subsequence "fghiejcklm" "fgehijkpqrlm") | + (diff:longest-common-subsequence "fghiejcklm" "fgehijkpqrlm") => "fghijklm" - (diff:edit-length "fghiejcklm" "fgehijkpqrlm") | + (diff:edit-length "fghiejcklm" "fgehijkpqrlm") => 6 - (diff:edits "fghiejcklm" "fgehijkpqrlm") | - => #A:fixZ32b(3 -5 -7 8 9 10) | + (diff:edits "fghiejcklm" "fgehijkpqrlm") + => #A:fixZ32b(3 -5 -7 8 9 10) ; e c h p q r File: slib.info, Node: Procedures, Next: Standards Support, Prev: Sorting and Searching, Up: Other Packages -7.3 Procedures | -============== | +7.3 Procedures +============== Anything that doesn't fall neatly into any of the other categories winds up here. @@ -13778,15 +14011,15 @@ up here. File: slib.info, Node: Type Coercion, Next: String-Case, Prev: Procedures, Up: Procedures -7.3.1 Type Coercion | -------------------- | +7.3.1 Type Coercion +------------------- `(require 'coerce)' - -- Function: type-of obj | + -- Function: type-of obj Returns a symbol name for the type of OBJ. - -- Function: coerce obj result-type | + -- Function: coerce obj result-type Converts and returns OBJ of type `char', `number', `string', `symbol', `list', or `vector' to RESULT-TYPE (which must be one of these symbols). @@ -13794,33 +14027,33 @@ File: slib.info, Node: Type Coercion, Next: String-Case, Prev: Procedures, U File: slib.info, Node: String-Case, Next: String Ports, Prev: Type Coercion, Up: Procedures -7.3.2 String-Case | ------------------ | +7.3.2 String-Case +----------------- `(require 'string-case)' - -- Procedure: string-upcase str | - -- Procedure: string-downcase str | - -- Procedure: string-capitalize str | + -- Procedure: string-upcase str + -- Procedure: string-downcase str + -- Procedure: string-capitalize str The obvious string conversion routines. These are non-destructive. - -- Function: string-upcase! str | - -- Function: string-downcase! str | - -- Function: string-capitalize! str | + -- Function: string-upcase! str + -- Function: string-downcase! str + -- Function: string-capitalize! str The destructive versions of the functions above. - -- Function: string-ci->symbol str | + -- Function: string-ci->symbol str Converts string STR to a symbol having the same case as if the symbol had been `read'. - -- Function: symbol-append obj1 ... | + -- Function: symbol-append obj1 ... Converts OBJ1 ... to strings, appends them, and converts to a symbol which is returned. Strings and numbers are converted to read's symbol case; the case of symbol characters is not changed. #f is converted to the empty string (symbol). - -- Function: StudlyCapsExpand str delimiter | - -- Function: StudlyCapsExpand str | + -- Function: StudlyCapsExpand str delimiter + -- Function: StudlyCapsExpand str DELIMITER must be a string or character. If absent, DELIMITER defaults to `-'. `StudlyCapsExpand' returns a copy of STR where DELIMITER is inserted between each lower-case character @@ -13842,18 +14075,18 @@ File: slib.info, Node: String-Case, Next: String Ports, Prev: Type Coercion, File: slib.info, Node: String Ports, Next: Line I/O, Prev: String-Case, Up: Procedures -7.3.3 String Ports | ------------------- | +7.3.3 String Ports +------------------ `(require 'string-port)' - -- Procedure: call-with-output-string proc | + -- Procedure: call-with-output-string proc PROC must be a procedure of one argument. This procedure calls PROC with one argument: a (newly created) output port. When the function returns, the string composed of the characters written into the port is returned. - -- Procedure: call-with-input-string string proc | + -- Procedure: call-with-input-string string proc PROC must be a procedure of one argument. This procedure calls PROC with one argument: an (newly created) input port from which STRING's contents may be read. When PROC returns, the port is @@ -13862,13 +14095,13 @@ File: slib.info, Node: String Ports, Next: Line I/O, Prev: String-Case, Up: File: slib.info, Node: Line I/O, Next: Multi-Processing, Prev: String Ports, Up: Procedures -7.3.4 Line I/O | --------------- | +7.3.4 Line I/O +-------------- `(require 'line-i/o)' - -- Function: read-line | - -- Function: read-line port | + -- Function: read-line + -- Function: read-line port Returns a string of the characters up to, but not including a newline or end of file, updating PORT to point to the character following the newline. If no characters are available, an end of @@ -13876,8 +14109,8 @@ File: slib.info, Node: Line I/O, Next: Multi-Processing, Prev: String Ports, which case it defaults to the value returned by `current-input-port'. - -- Procedure: read-line! string | - -- Procedure: read-line! string port | + -- Procedure: read-line! string + -- Procedure: read-line! string port Fills STRING with characters up to, but not including a newline or end of file, updating the PORT to point to the last character read or following the newline if it was read. If no characters are @@ -13887,25 +14120,30 @@ File: slib.info, Node: Line I/O, Next: Multi-Processing, Prev: String Ports, which case it defaults to the value returned by `current-input-port'. - -- Function: write-line string | - -- Function: write-line string port | + -- Function: write-line string + -- Function: write-line string port Writes STRING followed by a newline to the given PORT and returns an unspecified value. The PORT argument may be omitted, in which case it defaults to the value returned by `current-input-port'. - -- Function: system->line command tmp | - -- Function: system->line command | + -- Function: system->line command tmp + -- Function: system->line command COMMAND must be a string. The string TMP, if supplied, is a path to use as a temporary file. `system->line' calls `system' with COMMAND as argument, redirecting stdout to file TMP. `system->line' returns a string containing the first line of output from TMP. + `system->line' is intended to be a portable method for getting | + one-line results from programs like `pwd', `whoami', `hostname', | + `which', `identify', and `cksum'. Its behavior when called with | + programs which generate lots of output is unspecified. | + | File: slib.info, Node: Multi-Processing, Next: Metric Units, Prev: Line I/O, Up: Procedures -7.3.5 Multi-Processing | ----------------------- | +7.3.5 Multi-Processing +---------------------- `(require 'process)' @@ -13914,17 +14152,17 @@ multi-processing in the SCM Scheme implementation using procedures `alarm' and `alarm-interrupt'. Until this is ported to another implementation, consider it an example of writing schedulers in Scheme. - -- Procedure: add-process! proc | + -- Procedure: add-process! proc Adds proc, which must be a procedure (or continuation) capable of accepting accepting one argument, to the `process:queue'. The value returned is unspecified. The argument to PROC should be ignored. If PROC returns, the process is killed. - -- Procedure: process:schedule! | + -- Procedure: process:schedule! Saves the current process on `process:queue' and runs the next process from `process:queue'. The value returned is unspecified. - -- Procedure: kill-process! | + -- Procedure: kill-process! Kills the current process and runs the next process from `process:queue'. If there are no more processes on `process:queue', `(slib:exit)' is called (*note System::). @@ -13932,12 +14170,12 @@ implementation, consider it an example of writing schedulers in Scheme. File: slib.info, Node: Metric Units, Prev: Multi-Processing, Up: Procedures -7.3.6 Metric Units | ------------------- | +7.3.6 Metric Units +------------------ `(require 'metric-units)' - `http://swiss.csail.mit.edu/~jaffer/MIXF' | + `http://swiss.csail.mit.edu/~jaffer/MIXF' "Metric Interchange Format" is a character string encoding for numerical values and units which: @@ -13999,8 +14237,8 @@ used with the unit symbols t (metric ton), r (revolution), or Bd (baud). Exponents may be positive or negative. Fractional exponents must be parenthesized. -7.3.6.1 SI Prefixes | -................... | +7.3.6.1 SI Prefixes +................... Factor Name Symbol | Factor Name Symbol ====== ==== ====== | ====== ==== ====== @@ -14015,8 +14253,8 @@ parenthesized. 1e2 hecto h | 1e-21 zepto z 1e1 deka da | 1e-24 yocto y -7.3.6.2 Binary Prefixes | -....................... | +7.3.6.2 Binary Prefixes +....................... These binary prefixes are valid only with the units B (byte) and bit. However, decimal prefixes can also be used with bit; and decimal @@ -14031,8 +14269,8 @@ multiple (not submultiple) prefixes can also be used with B (byte). 1.048576e6 (2^20) mebi Mi 1.024e3 (2^10) kibi Ki -7.3.6.3 Unit Symbols | -.................... | +7.3.6.3 Unit Symbols +.................... Type of Quantity Name Symbol Equivalent ================ ==== ====== ========== @@ -14088,7 +14326,7 @@ multiple (not submultiple) prefixes can also be used with B (byte). * db/Np = ln(10) / 20 - -- Function: si:conversion-factor to-unit from-unit | + -- Function: si:conversion-factor to-unit from-unit If the strings FROM-UNIT and TO-UNIT express valid unit expressions for quantities of the same unit-dimensions, then the value returned by `si:conversion-factor' will be such that @@ -14126,8 +14364,8 @@ multiple (not submultiple) prefixes can also be used with B (byte). File: slib.info, Node: Standards Support, Next: Session Support, Prev: Procedures, Up: Other Packages -7.4 Standards Support | -===================== | +7.4 Standards Support +===================== * Menu: @@ -14148,19 +14386,19 @@ File: slib.info, Node: Standards Support, Next: Session Support, Prev: Proced File: slib.info, Node: RnRS, Next: With-File, Prev: Standards Support, Up: Standards Support -7.4.1 RnRS | ----------- | +7.4.1 RnRS +---------- The `r2rs', `r3rs', `r4rs', and `r5rs' features attempt to provide procedures and macros to bring a Scheme implementation to the desired version of Scheme. - -- Feature: r2rs | + -- Feature: r2rs Requires features implementing procedures and optional procedures specified by `Revised^2 Report on the Algorithmic Language Scheme'; namely `rev3-procedures' and `rev2-procedures'. - -- Feature: r3rs | + -- Feature: r3rs Requires features implementing procedures and optional procedures specified by `Revised^3 Report on the Algorithmic Language Scheme'; namely `rev3-procedures'. @@ -14168,12 +14406,12 @@ version of Scheme. _Note:_ SLIB already mandates the `r3rs' procedures which can be portably implemented in `r4rs' implementations. - -- Feature: r4rs | + -- Feature: r4rs Requires features implementing procedures and optional procedures specified by `Revised^4 Report on the Algorithmic Language Scheme'; namely `rev4-optional-procedures'. - -- Feature: r5rs | + -- Feature: r5rs Requires features implementing procedures and optional procedures specified by `Revised^5 Report on the Algorithmic Language Scheme'; namely `values', `macro', and `eval'. @@ -14181,33 +14419,33 @@ version of Scheme. File: slib.info, Node: With-File, Next: Transcripts, Prev: RnRS, Up: Standards Support -7.4.2 With-File | ---------------- | +7.4.2 With-File +--------------- `(require 'with-file)' - -- Function: with-input-from-file file thunk | - -- Function: with-output-to-file file thunk | + -- Function: with-input-from-file file thunk + -- Function: with-output-to-file file thunk Description found in R4RS. File: slib.info, Node: Transcripts, Next: Rev2 Procedures, Prev: With-File, Up: Standards Support -7.4.3 Transcripts | ------------------ | +7.4.3 Transcripts +----------------- `(require 'transcript)' - -- Function: transcript-on filename | - -- Function: transcript-off filename | + -- Function: transcript-on filename + -- Function: transcript-off filename Redefines `read-char', `read', `write-char', `write', `display', and `newline'. File: slib.info, Node: Rev2 Procedures, Next: Rev4 Optional Procedures, Prev: Transcripts, Up: Standards Support -7.4.4 Rev2 Procedures | ---------------------- | +7.4.4 Rev2 Procedures +--------------------- `(require 'rev2-procedures)' @@ -14215,8 +14453,8 @@ File: slib.info, Node: Rev2 Procedures, Next: Rev4 Optional Procedures, Prev: Scheme'. *N.B.*: The symbols `1+' and `-1+' are not `R4RS' syntax. Scheme->C, for instance, chokes on this module. - -- Procedure: substring-move-left! string1 start1 end1 string2 start2 | - -- Procedure: substring-move-right! string1 start1 end1 string2 start2 | + -- Procedure: substring-move-left! string1 start1 end1 string2 start2 + -- Procedure: substring-move-right! string1 start1 end1 string2 start2 STRING1 and STRING2 must be a strings, and START1, START2 and END1 must be exact integers satisfying @@ -14232,85 +14470,85 @@ Scheme->C, for instance, chokes on this module. increasing indices. `substring-move-right!' stores characters in time order of increasing indeces. - -- Procedure: substring-fill! string start end char | + -- Procedure: substring-fill! string start end char Fills the elements START-END of STRING with the character CHAR. - -- Function: string-null? str | + -- Function: string-null? str == `(= 0 (string-length STR))' - -- Procedure: append! pair1 ... | + -- Procedure: append! pair1 ... Destructively appends its arguments. Equivalent to `nconc'. - -- Function: 1+ n | + -- Function: 1+ n Adds 1 to N. - -- Function: -1+ n | + -- Function: -1+ n Subtracts 1 from N. - -- Function: <? | - -- Function: <=? | - -- Function: =? | - -- Function: >? | - -- Function: >=? | + -- Function: <? + -- Function: <=? + -- Function: =? + -- Function: >? + -- Function: >=? These are equivalent to the procedures of the same name but without the trailing `?'. File: slib.info, Node: Rev4 Optional Procedures, Next: Multi-argument / and -, Prev: Rev2 Procedures, Up: Standards Support -7.4.5 Rev4 Optional Procedures | ------------------------------- | +7.4.5 Rev4 Optional Procedures +------------------------------ `(require 'rev4-optional-procedures)' For the specification of these optional procedures, *Note Standard procedures: (r4rs)Standard procedures. - -- Function: list-tail l p | + -- Function: list-tail l p - -- Function: string-copy | + -- Function: string-copy - -- Procedure: string-fill! s obj | + -- Procedure: string-fill! s obj - -- Procedure: vector-fill! s obj | + -- Procedure: vector-fill! s obj File: slib.info, Node: Multi-argument / and -, Next: Multi-argument Apply, Prev: Rev4 Optional Procedures, Up: Standards Support -7.4.6 Multi-argument / and - | ----------------------------- | +7.4.6 Multi-argument / and - +---------------------------- `(require 'multiarg/and-)' For the specification of these optional forms, *Note Numerical operations: (r4rs)Numerical operations. - -- Function: / dividend divisor1 ... | + -- Function: / dividend divisor1 ... - -- Function: - minuend subtrahend1 ... | + -- Function: - minuend subtrahend1 ... File: slib.info, Node: Multi-argument Apply, Next: Rationalize, Prev: Multi-argument / and -, Up: Standards Support -7.4.7 Multi-argument Apply | --------------------------- | +7.4.7 Multi-argument Apply +-------------------------- `(require 'multiarg-apply)' For the specification of this optional form, *Note Control features: (r4rs)Control features. - -- Function: apply proc arg1 ... | + -- Function: apply proc arg1 ... File: slib.info, Node: Rationalize, Next: Promises, Prev: Multi-argument Apply, Up: Standards Support -7.4.8 Rationalize | ------------------ | +7.4.8 Rationalize +----------------- `(require 'rationalize)' - -- Function: rationalize x e | + -- Function: rationalize x e Computes the correct result for exact arguments (provided the implementation supports exact rational numbers of unlimited precision); and produces a reasonable answer for inexact arguments @@ -14321,14 +14559,14 @@ File: slib.info, Node: Rationalize, Next: Promises, Prev: Multi-argument Appl (non-integer) rational numbers. The following procedures return a list of the numerator and denominator. - -- Function: find-ratio x e | + -- Function: find-ratio x e `find-ratio' returns the list of the _simplest_ numerator and denominator whose quotient differs from X by no more than E. (find-ratio 3/97 .0001) => (3 97) (find-ratio 3/97 .001) => (1 32) - -- Function: find-ratio-between x y | + -- Function: find-ratio-between x y `find-ratio-between' returns the list of the _simplest_ numerator and denominator between X and Y. @@ -14338,18 +14576,18 @@ of the numerator and denominator. File: slib.info, Node: Promises, Next: Dynamic-Wind, Prev: Rationalize, Up: Standards Support -7.4.9 Promises | --------------- | +7.4.9 Promises +-------------- `(require 'promise)' - -- Function: make-promise proc | + -- Function: make-promise proc - -- Function: force promise | + -- Function: force promise `(require 'delay)' provides `force' and `delay': - -- Macro: delay obj | + -- Macro: delay obj Change occurrences of `(delay EXPRESSION)' to (make-promise (lambda () EXPRESSION)) @@ -14360,8 +14598,8 @@ File: slib.info, Node: Promises, Next: Dynamic-Wind, Prev: Rationalize, Up: File: slib.info, Node: Dynamic-Wind, Next: Eval, Prev: Promises, Up: Standards Support -7.4.10 Dynamic-Wind | -------------------- | +7.4.10 Dynamic-Wind +------------------- `(require 'dynamic-wind)' @@ -14369,7 +14607,7 @@ File: slib.info, Node: Dynamic-Wind, Next: Eval, Prev: Promises, Up: Standar designed to take into account the fact that continuations produced by `call-with-current-continuation' may be reentered. - -- Procedure: dynamic-wind thunk1 thunk2 thunk3 | + -- Procedure: dynamic-wind thunk1 thunk2 thunk3 The arguments THUNK1, THUNK2, and THUNK3 must all be procedures of no arguments (thunks). @@ -14390,12 +14628,12 @@ designed to take into account the fact that continuations produced by File: slib.info, Node: Eval, Next: Values, Prev: Dynamic-Wind, Up: Standards Support -7.4.11 Eval | ------------ | +7.4.11 Eval +----------- `(require 'eval)' - -- Function: eval expression environment-specifier | + -- Function: eval expression environment-specifier Evaluates EXPRESSION in the specified environment and returns its value. EXPRESSION must be a valid Scheme expression represented as data, and ENVIRONMENT-SPECIFIER must be a value returned by one @@ -14414,9 +14652,9 @@ File: slib.info, Node: Eval, Next: Values, Prev: Dynamic-Wind, Up: Standards (f + 10)) => 20 - -- Function: scheme-report-environment version | - -- Function: null-environment version | - -- Function: null-environment | + -- Function: scheme-report-environment version + -- Function: null-environment version + -- Function: null-environment VERSION must be an exact non-negative integer N corresponding to a version of one of the Revised^N Reports on Scheme. `Scheme-report-environment' returns a specifier for an environment @@ -14437,7 +14675,7 @@ File: slib.info, Node: Eval, Next: Values, Prev: Dynamic-Wind, Up: Standards `scheme-report-environment' may be immutable. - -- Function: interaction-environment | + -- Function: interaction-environment This optional procedure returns a specifier for the environment that contains implementation-defined bindings, typically a superset of those listed in the report. The intent is that this @@ -14473,16 +14711,16 @@ Here are some more `eval' examples: File: slib.info, Node: Values, Next: SRFI, Prev: Eval, Up: Standards Support -7.4.12 Values | -------------- | +7.4.12 Values +------------- `(require 'values)' - -- Function: values obj ... | + -- Function: values obj ... `values' takes any number of arguments, and passes (returns) them to its continuation. - -- Function: call-with-values thunk proc | + -- Function: call-with-values thunk proc THUNK must be a procedure of no arguments, and PROC must be a procedure. `call-with-values' calls THUNK with a continuation that, when passed some values, calls PROC with those values as @@ -14497,23 +14735,15 @@ File: slib.info, Node: Values, Next: SRFI, Prev: Eval, Up: Standards Support File: slib.info, Node: SRFI, Prev: Values, Up: Standards Support -7.4.13 SRFI | ------------ | +7.4.13 SRFI +----------- `(require 'srfi)' Implements "Scheme Request For Implementation" (SRFI) as described at -`http://srfi.schemers.org/' | - -The Copyright terms of each SRFI states: - - "However, this document itself may not be modified in any way, ..." - -Therefore, the specification of SRFI constructs must not be quoted -without including the complete SRFI document containing discussion and -a sample implementation program. - - -- Macro: cond-expand <clause1> <clause2> ... | +`http://srfi.schemers.org/' + | + -- Macro: cond-expand <clause1> <clause2> ... _Syntax:_ Each <clause> should be of the form (<feature> <expression1> ...) @@ -14529,292 +14759,262 @@ a sample implementation program. an error is signaled. SLIB `cond-expand' is an extension of SRFI-0, - `http://srfi.schemers.org/srfi-0/srfi-0.html'. | + `http://srfi.schemers.org/srfi-0/srfi-0.html'. * Menu: -* SRFI-1:: list-processing -* SRFI-2:: guarded LET* special form -* SRFI-8:: Binding to multiple values -* SRFI-9:: Defining Record Types +* SRFI-1:: list-processing | - SRFI-47 is the same as *Note Arrays::. | + * SRFI-2 *Note Guarded LET* special form:: | | - -File: slib.info, Node: SRFI-1, Next: SRFI-2, Prev: SRFI, Up: SRFI + * SRFI-8 *Note Binding to multiple values:: | + | + * SRFI-9 *Note Define-Record-Type:: | + | + * SRFI-47 *Note Arrays:: | + | + * SRFI-59 *Note Vicinity:: | + | + * SRFI-63 *Note Arrays:: | + | + * SRFI-60 *Note Bit-Twiddling:: | + | + * SRFI-61 *Note Guarded COND Clause:: | -7.4.13.1 SRFI-1 | -............... | + +File: slib.info, Node: SRFI-1, Prev: SRFI, Up: SRFI + | +7.4.13.1 SRFI-1 +............... `(require 'srfi-1)' Implements the "SRFI-1" "list-processing library" as described at -`http://srfi.schemers.org/srfi-1/srfi-1.html' | +`http://srfi.schemers.org/srfi-1/srfi-1.html' Constructors ------------ - -- Function: xcons d a | + -- Function: xcons d a `(define (xcons d a) (cons a d))'. - -- Function: list-tabulate len proc | + -- Function: list-tabulate len proc Returns a list of length LEN. Element I is `(PROC I)' for 0 <= I < LEN. - -- Function: cons* obj1 obj2 | + -- Function: cons* obj1 obj2 - -- Function: list-copy flist | + -- Function: list-copy flist - -- Function: iota count start step | - -- Function: iota count start | - -- Function: iota count | + -- Function: iota count start step + -- Function: iota count start + -- Function: iota count Returns a list of COUNT numbers: (START, START+STEP, ..., START+(COUNT-1)*STEP). - -- Function: circular-list obj1 obj2 ... | + -- Function: circular-list obj1 obj2 ... Returns a circular list of OBJ1, OBJ2, .... Predicates ---------- - -- Function: proper-list? obj | + -- Function: proper-list? obj - -- Function: circular-list? x | + -- Function: circular-list? x - -- Function: dotted-list? obj | + -- Function: dotted-list? obj - -- Function: null-list? obj | + -- Function: null-list? obj - -- Function: not-pair? obj | + -- Function: not-pair? obj - -- Function: list= =pred list ... | + -- Function: list= =pred list ... Selectors --------- - -- Function: first pair | + -- Function: first pair - -- Function: second pair | + -- Function: second pair - -- Function: third pair | + -- Function: third pair - -- Function: fourth pair | + -- Function: fourth pair - -- Function: fifth pair | - -- Function: sixth pair | - -- Function: seventh pair | - -- Function: eighth pair | - -- Function: ninth pair | - -- Function: tenth pair | + -- Function: fifth pair + -- Function: sixth pair + -- Function: seventh pair + -- Function: eighth pair + -- Function: ninth pair + -- Function: tenth pair - -- Function: car+cdr pair | + -- Function: car+cdr pair - -- Function: drop lst k | - -- Function: take lst k | - -- Function: take! lst k | + -- Function: drop lst k + -- Function: take lst k + -- Function: take! lst k - -- Function: take-right lst k | + -- Function: take-right lst k - -- Function: drop-right lst k | + -- Function: drop-right lst k - -- Procedure: drop-right! lst k | + -- Procedure: drop-right! lst k - -- Function: split-at lst k | - -- Function: split-at! lst k | + -- Function: split-at lst k + -- Function: split-at! lst k - -- Function: last lst k ... | + -- Function: last lst k ... Miscellaneous ------------- - -- Function: length+ clist | + -- Function: length+ clist - -- Function: concatenate lists | - -- Function: concatenate! lists | + -- Function: concatenate lists + -- Function: concatenate! lists - -- Procedure: reverse! lst | + -- Procedure: reverse! lst - -- Function: append-reverse rev-head tail | - -- Function: append-reverse! rev-head tail | + -- Function: append-reverse rev-head tail + -- Function: append-reverse! rev-head tail - -- Function: zip list1 list2 ... | + -- Function: zip list1 list2 ... - -- Function: unzip1 lst | - -- Function: unzip2 lst | - -- Function: unzip3 lst | - -- Function: unzip4 lst | - -- Function: unzip5 lst | + -- Function: unzip1 lst + -- Function: unzip2 lst + -- Function: unzip3 lst + -- Function: unzip4 lst + -- Function: unzip5 lst - -- Function: count pred list1 list2 ... | + -- Function: count pred list1 list2 ... Fold and Unfold --------------- - -- Function: fold kons knil clist1 clist2 ... | + -- Function: fold kons knil clist1 clist2 ... - -- Function: fold-right kons knil clist1 clist2 ... | - | - -- Function: pair-fold kons knil clist1 clist2 ... | - | - -- Function: pair-fold-right kons knil clist1 clist2 ... | - | - -- Function: reduce f ridentity list | - -- Function: reduce-right f ridentity list | - | - -- Procedure: map! f clist1 clist2 ... | - | - -- Function: pair-for-each f clist1 clist2 ... | + -- Function: fold-right kons knil clist1 clist2 ... + + -- Function: pair-fold kons knil clist1 clist2 ... + + -- Function: pair-fold-right kons knil clist1 clist2 ... + + -- Function: reduce f ridentity list + -- Function: reduce-right f ridentity list + + -- Procedure: map! f clist1 clist2 ... + + -- Function: pair-for-each f clist1 clist2 ... Filtering and Partitioning -------------------------- - -- Function: filter pred list | + -- Function: filter pred list - -- Procedure: filter! pred list | + -- Procedure: filter! pred list - -- Function: partition pred list | - | - -- Function: remove pred list | - | - -- Procedure: partition! pred list | - | - -- Procedure: remove! pred list | + -- Function: partition pred list + + -- Function: remove pred list + + -- Procedure: partition! pred list + + -- Procedure: remove! pred list Searching --------- - -- Function: find pred clist | + -- Function: find pred clist - -- Function: find-tail pred clist | + -- Function: find-tail pred clist - -- Function: span pred list | + -- Function: span pred list - -- Procedure: span! pred list | + -- Procedure: span! pred list - -- Function: break pred list | + -- Function: break pred list - -- Procedure: break! pred list | + -- Procedure: break! pred list - -- Function: any pred clist1 clist2 ... | + -- Function: any pred clist1 clist2 ... - -- Function: list-index pred clist1 clist2 ... | - | - -- Function: member obj list = | - -- Function: member obj list | + -- Function: list-index pred clist1 clist2 ... + + -- Function: member obj list = + -- Function: member obj list Deleting -------- - -- Function: delete-duplicates x list = | - -- Function: delete-duplicates x list | - | - -- Procedure: delete-duplicates! x list = | - -- Procedure: delete-duplicates! x list | - | + -- Function: delete-duplicates x list = + -- Function: delete-duplicates x list + + -- Procedure: delete-duplicates! x list = + -- Procedure: delete-duplicates! x list + Association lists ----------------- - -- Function: assoc obj alist pred | - -- Function: assoc obj alist | - | - -- Function: alist-cons key datum alist | - | - -- Function: alist-copy alist | - | - -- Function: alist-delete key alist = | - -- Function: alist-delete key alist | - | - -- Procedure: alist-delete! key alist = | - -- Procedure: alist-delete! key alist | + -- Function: assoc obj alist pred + -- Function: assoc obj alist + + -- Function: alist-cons key datum alist + + -- Function: alist-copy alist + + -- Function: alist-delete key alist = + -- Function: alist-delete key alist + + -- Procedure: alist-delete! key alist = + -- Procedure: alist-delete! key alist Set operations -------------- - -- Function: lset<= = list1 ... | - Determine if a transitive subset relation exists between the | - lists LIST1 ..., using = to determine equality of list members. | - | - -- Function: lset= = list1 list2 ... | - | - -- Function: lset-adjoin list elt1 ... | - | - -- Function: lset-union = list1 ... | - | - -- Function: lset-intersection = list1 list2 ... | - | - -- Function: lset-difference = list1 list2 ... | - | - -- Function: lset-xor = list1 ... | - | - -- Function: lset-diff+intersection = list1 list2 ... | - | -These are linear-update variants. They are allowed, but not required, | -to use the cons cells in their first list parameter to construct their | -answer. `lset-union!' is permitted to recycle cons cells from any of | -its list arguments. | - | - -- Procedure: lset-intersection! = list1 list2 ... | - | - -- Procedure: lset-difference! = list1 list2 ... | - | - -- Procedure: lset-union! = list1 ... | - | - -- Procedure: lset-xor! = list1 ... | - | - -- Procedure: lset-diff+intersection! = list1 list2 ... | - | - -File: slib.info, Node: SRFI-2, Next: SRFI-8, Prev: SRFI-1, Up: SRFI + -- Function: lset<= = list1 ... + Determine if a transitive subset relation exists between the + lists LIST1 ..., using = to determine equality of list members. -7.4.13.2 SRFI-2 | -............... | + -- Function: lset= = list1 list2 ... -`(require 'srfi-2)' + -- Function: lset-adjoin list elt1 ... - -- Macro: and-let* claws body ... | - `http://srfi.schemers.org/srfi-2/srfi-2.html' | + -- Function: lset-union = list1 ... - -File: slib.info, Node: SRFI-8, Next: SRFI-9, Prev: SRFI-2, Up: SRFI + -- Function: lset-intersection = list1 list2 ... -7.4.13.3 SRFI-8 | -............... | + -- Function: lset-difference = list1 list2 ... -`(require 'srfi-8)' + -- Function: lset-xor = list1 ... - -- Special Form: receive formals expression body ... | - `http://srfi.schemers.org/srfi-8/srfi-8.html' | + -- Function: lset-diff+intersection = list1 list2 ... - -File: slib.info, Node: SRFI-9, Prev: SRFI-8, Up: SRFI +These are linear-update variants. They are allowed, but not required, +to use the cons cells in their first list parameter to construct their +answer. `lset-union!' is permitted to recycle cons cells from any of +its list arguments. -7.4.13.4 SRFI-9 | -............... | + -- Procedure: lset-intersection! = list1 list2 ... -`(require 'srfi-9)' + -- Procedure: lset-difference! = list1 list2 ... - `http://srfi.schemers.org/srfi-9/srfi-9.html' | + -- Procedure: lset-union! = list1 ... - -- Special Form: define-record-type <type-name> (<constructor-name> | - <field-tag> ...) <predicate-name> <field spec> ... - Where - <field-spec> == (<field-tag> <accessor-name>) - == (<field-tag> <accessor-name> <modifier-name>) + -- Procedure: lset-xor! = list1 ... - `define-record-type' is a syntax wrapper for the SLIB `record' - module. + -- Procedure: lset-diff+intersection! = list1 list2 ... File: slib.info, Node: Session Support, Next: System Interface, Prev: Standards Support, Up: Other Packages - -7.5 Session Support | -=================== | - | -If `(provided? 'abort)': | | - -- Function: abort | - Resumes the top level Read-Eval-Print loop. If provided, `abort' | - is used by the `break' and `debug' packages. | +7.5 Session Support +=================== + +If `(provided? 'abort)': + + -- Function: abort + Resumes the top level Read-Eval-Print loop. If provided, `abort' + is used by the `break' and `debug' packages. * Menu: @@ -14827,20 +15027,20 @@ If `(provided? 'abort)': | File: slib.info, Node: Repl, Next: Quick Print, Prev: Session Support, Up: Session Support -7.5.1 Repl | ----------- | +7.5.1 Repl +---------- `(require 'repl)' Here is a read-eval-print-loop which, given an eval, evaluates forms. - -- Procedure: repl:top-level repl:eval | + -- Procedure: repl:top-level repl:eval `read's, `repl:eval's and `write's expressions from `(current-input-port)' to `(current-output-port)' until an end-of-file is encountered. `load', `slib:eval', `slib:error', and `repl:quit' dynamically bound during `repl:top-level'. - -- Procedure: repl:quit | + -- Procedure: repl:quit Exits from the invocation of `repl:top-level'. The `repl:' procedures establish, as much as is possible to do @@ -14862,8 +15062,8 @@ catching lines and the following lines to your Scheme init file: File: slib.info, Node: Quick Print, Next: Debug, Prev: Repl, Up: Session Support -7.5.2 Quick Print | ------------------ | +7.5.2 Quick Print +----------------- `(require 'qp)' @@ -14877,16 +15077,16 @@ much improved. variables `*print-level*' and `*print-level*' are set, huge strings and bit-vectors are _not_ limited. - -- Procedure: qp arg1 ... | - -- Procedure: qpn arg1 ... | - -- Procedure: qpr arg1 ... | + -- Procedure: qp arg1 ... + -- Procedure: qpn arg1 ... + -- Procedure: qpr arg1 ... `qp' writes its arguments, separated by spaces, to `(current-output-port)'. `qp' compresses printing by substituting `...' for substructure it does not have sufficient room to print. `qpn' is like `qp' but outputs a newline before returning. `qpr' is like `qpn' except that it returns its last argument. - -- Variable: *qp-width* | + -- Variable: *qp-width* *QP-WIDTH* is the largest number of characters that `qp' should use. If *QP-WIDTH* is #f, then all items will be `write'n. If *QP-WIDTH* is 0, then all items except procedures will be @@ -14895,8 +15095,8 @@ much improved. File: slib.info, Node: Debug, Next: Breakpoints, Prev: Quick Print, Up: Session Support -7.5.3 Debug | ------------ | +7.5.3 Debug +----------- `(require 'debug)' @@ -14909,71 +15109,71 @@ printer for `qp'. This example shows how to do this: (provide 'qp) (require 'debug) - | - -- Procedure: trace-all file ... | + + -- Procedure: trace-all file ... Traces (*note Trace::) all procedures `define'd at top-level in `file' .... - -- Procedure: track-all file ... | + -- Procedure: track-all file ... Tracks (*note Trace::) all procedures `define'd at top-level in `file' .... - -- Procedure: stack-all file ... | + -- Procedure: stack-all file ... Stacks (*note Trace::) all procedures `define'd at top-level in `file' .... - -- Procedure: break-all file ... | + -- Procedure: break-all file ... Breakpoints (*note Breakpoints::) all procedures `define'd at top-level in `file' .... File: slib.info, Node: Breakpoints, Next: Trace, Prev: Debug, Up: Session Support -7.5.4 Breakpoints | ------------------ | +7.5.4 Breakpoints +----------------- `(require 'break)' - -- Function: init-debug | + -- Function: init-debug If your Scheme implementation does not support `break' or `abort', a message will appear when you `(require 'break)' or `(require 'debug)' telling you to type `(init-debug)'. This is in order to establish a top-level continuation. Typing `(init-debug)' at top level sets up a continuation for `break'. - -- Function: breakpoint arg1 ... | + -- Function: breakpoint arg1 ... Returns from the top level continuation and pushes the continuation from which it was called on a continuation stack. - -- Function: continue | + -- Function: continue Pops the topmost continuation off of the continuation stack and returns an unspecified value to it. - -- Function: continue arg1 ... | + -- Function: continue arg1 ... Pops the topmost continuation off of the continuation stack and returns ARG1 ... to it. - -- Macro: break proc1 ... | + -- Macro: break proc1 ... Redefines the top-level named procedures given as arguments so that `breakpoint' is called before calling PROC1 .... - -- Macro: break | + -- Macro: break With no arguments, makes sure that all the currently broken identifiers are broken (even if those identifiers have been redefined) and returns a list of the broken identifiers. - -- Macro: unbreak proc1 ... | + -- Macro: unbreak proc1 ... Turns breakpoints off for its arguments. - -- Macro: unbreak | + -- Macro: unbreak With no arguments, unbreaks all currently broken identifiers and returns a list of these formerly broken identifiers. These are _procedures_ for breaking. If defmacros are not natively supported by your implementation, these might be more convenient to use. - -- Function: breakf proc | - -- Function: breakf proc name | + -- Function: breakf proc + -- Function: breakf proc name To break, type (set! SYMBOL (breakf SYMBOL)) or @@ -14983,15 +15183,15 @@ supported by your implementation, these might be more convenient to use. or (define SYMBOL (breakf FUNCTION 'SYMBOL)) - -- Function: unbreakf proc | + -- Function: unbreakf proc To unbreak, type (set! SYMBOL (unbreakf SYMBOL)) File: slib.info, Node: Trace, Prev: Breakpoints, Up: Session Support -7.5.5 Tracing | -------------- | +7.5.5 Tracing +------------- `(require 'trace)' @@ -15010,69 +15210,69 @@ trace ...' when the procdure is called; pops and prints `RETN PROCEDURE-NAME VALUE' when the procedure returns. - -- Variable: debug:max-count | + -- Variable: debug:max-count If a traced procedure calls itself or untraced procedures which call it, stack, track, and trace will limit the number of stack pushes to DEBUG:MAX-COUNT. - -- Function: print-call-stack | - -- Function: print-call-stack port | + -- Function: print-call-stack + -- Function: print-call-stack port Prints the call-stack to PORT or the current-error-port. - -- Macro: trace proc1 ... | + -- Macro: trace proc1 ... Traces the top-level named procedures given as arguments. - -- Macro: trace | + -- Macro: trace With no arguments, makes sure that all the currently traced identifiers are traced (even if those identifiers have been redefined) and returns a list of the traced identifiers. - -- Macro: track proc1 ... | + -- Macro: track proc1 ... Traces the top-level named procedures given as arguments. - -- Macro: track | + -- Macro: track With no arguments, makes sure that all the currently tracked identifiers are tracked (even if those identifiers have been redefined) and returns a list of the tracked identifiers. - -- Macro: stack proc1 ... | + -- Macro: stack proc1 ... Traces the top-level named procedures given as arguments. - -- Macro: stack | + -- Macro: stack With no arguments, makes sure that all the currently stacked identifiers are stacked (even if those identifiers have been redefined) and returns a list of the stacked identifiers. - -- Macro: untrace proc1 ... | + -- Macro: untrace proc1 ... Turns tracing, tracking, and off for its arguments. - -- Macro: untrace | + -- Macro: untrace With no arguments, untraces all currently traced identifiers and returns a list of these formerly traced identifiers. - -- Macro: untrack proc1 ... | + -- Macro: untrack proc1 ... Turns tracing, tracking, and off for its arguments. - -- Macro: untrack | + -- Macro: untrack With no arguments, untracks all currently tracked identifiers and returns a list of these formerly tracked identifiers. - -- Macro: unstack proc1 ... | + -- Macro: unstack proc1 ... Turns tracing, stacking, and off for its arguments. - -- Macro: unstack | + -- Macro: unstack With no arguments, unstacks all currently stacked identifiers and returns a list of these formerly stacked identifiers. These are _procedures_ for tracing. If defmacros are not natively supported by your implementation, these might be more convenient to use. - -- Function: tracef proc | - -- Function: tracef proc name | - -- Function: trackf proc | - -- Function: trackf proc name | - -- Function: stackf proc | - -- Function: stackf proc name | + -- Function: tracef proc + -- Function: tracef proc name + -- Function: trackf proc + -- Function: trackf proc name + -- Function: stackf proc + -- Function: stackf proc name To trace, type (set! SYMBOL (tracef SYMBOL)) or @@ -15082,26 +15282,26 @@ supported by your implementation, these might be more convenient to use. or (define SYMBOL (tracef FUNCTION 'SYMBOL)) - -- Function: untracef proc | + -- Function: untracef proc Removes tracing, tracking, or stacking for PROC. To untrace, type (set! SYMBOL (untracef SYMBOL)) File: slib.info, Node: System Interface, Next: Extra-SLIB Packages, Prev: Session Support, Up: Other Packages -7.6 System Interface | -==================== | +7.6 System Interface +==================== If `(provided? 'getenv)': - -- Function: getenv name | + -- Function: getenv name Looks up NAME, a string, in the program environment. If NAME is found a string of its value is returned. Otherwise, `#f' is returned. If `(provided? 'system)': - -- Function: system command-string | + -- Function: system command-string Executes the COMMAND-STRING on the computer and returns the integer status code. @@ -15114,12 +15314,12 @@ If `(provided? 'system)': File: slib.info, Node: Directories, Next: Transactions, Prev: System Interface, Up: System Interface -7.6.1 Directories | ------------------ | +7.6.1 Directories +----------------- `(require 'directory)' - -- Function: current-directory | + -- Function: current-directory `current-directory' returns a string containing the absolute file name representing the current working directory. If this string cannot be obtained, #f is returned. @@ -15127,22 +15327,22 @@ File: slib.info, Node: Directories, Next: Transactions, Prev: System Interfac If `current-directory' cannot be supported by the platform, then #f is returned. - -- Function: make-directory name | + -- Function: make-directory name Creates a sub-directory NAME of the current-directory. If successful, `make-directory' returns #t; otherwise #f. - -- Function: directory-for-each proc directory | + -- Function: directory-for-each proc directory PROC must be a procedure taking one argument. `Directory-For-Each' applies PROC to the (string) name of each file in DIRECTORY. The dynamic order in which PROC is applied to the filenames is unspecified. The value returned by `directory-for-each' is unspecified. - -- Function: directory-for-each proc directory pred | + -- Function: directory-for-each proc directory pred Applies PROC only to those filenames for which the procedure PRED returns a non-false value. - -- Function: directory-for-each proc directory match | + -- Function: directory-for-each proc directory match Applies PROC only to those filenames for which `(filename:match?? MATCH)' would return a non-false value (*note Filenames: (slib)Filenames.). @@ -15156,8 +15356,8 @@ File: slib.info, Node: Directories, Next: Transactions, Prev: System Interfac File: slib.info, Node: Transactions, Next: CVS, Prev: Directories, Up: System Interface -7.6.2 Transactions | ------------------- | +7.6.2 Transactions +------------------ If `system' is provided by the Scheme implementation, the "transact" package provides functions for file-locking and file-replacement @@ -15186,8 +15386,8 @@ camps support contention detection and resolution only through weak conventions of some their document editing programs. The "file-lock" procedures implement a transaction method for file replacement -compatible with the methods used by the GNU "emacs" text editor on Unix | -systems and the Microsoft "Word" editor. | +compatible with the methods used by the GNU "emacs" text editor on Unix +systems and the Microsoft "Word" editor. Both protocols employ what I term a "certificate" containing the user, hostname, time, and (on Unix) process-id. Intent to replace FILE is @@ -15200,12 +15400,12 @@ link to a certificate named for the visited FILE prefixed with `.#'. Because Unix systems can import Microsoft file systems, these routines maintain and check both Emacs and Word certificates. - -- Function: file-lock-owner path | + -- Function: file-lock-owner path Returns the string `USER@HOSTNAME' associated with the lock owner of file PATH if locked; and #f otherwise. - -- Procedure: file-lock! path email | - -- Procedure: file-lock! path | + -- Procedure: file-lock! path email + -- Procedure: file-lock! path PATH must be a string naming the file to be locked. If supplied, EMAIL must be a string formatted as `USER@HOSTNAME'. If absent, EMAIL defaults to the value returned by `user-email-address'. @@ -15214,7 +15414,7 @@ maintain and check both Emacs and Word certificates. PATH is unlocked, then `file-lock!' returns the certificate string associated with the new lock for file PATH. - -- Procedure: file-unlock! path certificate | + -- Procedure: file-unlock! path certificate PATH must be a string naming the file to be unlocked. CERTIFICATE must be the string returned by `file-lock!' for PATH. @@ -15225,7 +15425,7 @@ maintain and check both Emacs and Word certificates. File Transactions ................. - -- Function: emacs:backup-name path backup-style | + -- Function: emacs:backup-name path backup-style PATH must be a string. BACKUP-STYLE must be a symbol. Depending on BACKUP-STYLE, `emacs:backup-name' returns: none @@ -15249,10 +15449,10 @@ File Transactions bak the string "PATH.bak" - -- Function: transact-file-replacement proc path backup-style | + -- Function: transact-file-replacement proc path backup-style certificate - -- Function: transact-file-replacement proc path backup-style | - -- Function: transact-file-replacement proc path | + -- Function: transact-file-replacement proc path backup-style + -- Function: transact-file-replacement proc path PATH must be a string naming an existing file. BACKUP-STYLE is one of the symbols none, simple, numbered, existing, orig, bak or #f; with meanings described above; or a string naming the location @@ -15285,7 +15485,7 @@ File Transactions Identification .............. - -- Function: user-email-address | + -- Function: user-email-address `user-email-address' returns a string of the form `username@hostname'. If this e-mail address cannot be obtained, #f is returned. @@ -15293,45 +15493,45 @@ Identification File: slib.info, Node: CVS, Prev: Transactions, Up: System Interface -7.6.3 CVS | ---------- | +7.6.3 CVS +--------- `(require 'cvs)' - -- Function: cvs-files directory/ | + -- Function: cvs-files directory/ Returns a list of the local pathnames (with prefix DIRECTORY/) of all CVS controlled files in DIRECTORY/ and in DIRECTORY/'s subdirectories. - -- Function: cvs-directories directory/ | + -- Function: cvs-directories directory/ Returns a list of all of DIRECTORY/ and all DIRECTORY/'s CVS controlled subdirectories. - -- Function: cvs-root path/ | + -- Function: cvs-root path/ Returns the (string) contents of PATH/CVS/Root; or `(getenv "CVSROOT")' if Root doesn't exist. - -- Function: cvs-repository directory/ | + -- Function: cvs-repository directory/ Returns the (string) contents of DIRECTORY/CVS/Root appended with DIRECTORY/CVS/Repository; or #f if DIRECTORY/CVS/Repository doesn't exist. - -- Procedure: cvs-set-root! new-root directory/ | - Writes NEW-ROOT to file CVS/Root of DIRECTORY/. | - | - -- Procedure: cvs-set-roots! new-root directory/ | - Writes NEW-ROOT to file CVS/Root of DIRECTORY/ and all its CVS | + -- Procedure: cvs-set-root! new-root directory/ + Writes NEW-ROOT to file CVS/Root of DIRECTORY/. + + -- Procedure: cvs-set-roots! new-root directory/ + Writes NEW-ROOT to file CVS/Root of DIRECTORY/ and all its CVS subdirectories. - -- Function: cvs-vet directory/ | + -- Function: cvs-vet directory/ Signals an error if CVS/Repository or CVS/Root files in DIRECTORY/ or any subdirectory do not match. File: slib.info, Node: Extra-SLIB Packages, Prev: System Interface, Up: Other Packages -7.7 Extra-SLIB Packages | -======================= | +7.7 Extra-SLIB Packages +======================= Several Scheme packages have been written using SLIB. There are several reasons why a package might not be included in the SLIB distribution: @@ -15355,9 +15555,9 @@ as easily as any other SLIB package. Some optional packages (for which SLIB-PSD is a portable debugger for Scheme (requires emacs editor). - http://swiss.csail.mit.edu/ftpdir/scm/slib-psd1-3.tar.gz | + http://swiss.csail.mit.edu/ftpdir/scm/slib-psd1-3.tar.gz - swiss.csail.mit.edu:/pub/scm/slib-psd1-3.tar.gz | + swiss.csail.mit.edu:/pub/scm/slib-psd1-3.tar.gz ftp.maths.tcd.ie:pub/bosullvn/jacal/slib-psd1-3.tar.gz @@ -15387,21 +15587,21 @@ JFILTER File: slib.info, Node: About SLIB, Next: Index, Prev: Other Packages, Up: Top -8 About SLIB | -************ | +8 About SLIB +************ More people than I can name have contributed to SLIB. Thanks to all of you! - SLIB 3a2, released June 2005. | + SLIB 3a3, released February 2006. | Aubrey Jaffer <agj @ alum.mit.edu> Hyperactive Software - The Maniac Inside! - `http://swiss.csail.mit.edu/~jaffer/SLIB.html' | + `http://swiss.csail.mit.edu/~jaffer/SLIB.html' * Menu: * Installation:: How to install SLIB on your system. -* The SLIB script:: Run interactive SLIB sessions. | +* The SLIB script:: Run interactive SLIB sessions. * Porting:: SLIB to new platforms. * Coding Guidelines:: How to write modules for SLIB. * Copyrights:: Intellectual propery issues. @@ -15409,16 +15609,16 @@ you! File: slib.info, Node: Installation, Next: The SLIB script, Prev: About SLIB, Up: About SLIB - | -8.1 Installation | -================ | -There are five parts to installation: | +8.1 Installation +================ + +There are five parts to installation: * Unpack the SLIB distribution. - * Install documentation and `slib' script. | - | + * Install documentation and `slib' script. + * Configure the Scheme implementation(s) to locate the SLIB directory. @@ -15427,8 +15627,8 @@ There are five parts to installation: | * Build the SLIB catalog for the Scheme implementation. -8.1.1 Unpacking the SLIB Distribution | -------------------------------------- | +8.1.1 Unpacking the SLIB Distribution +------------------------------------- If the SLIB distribution is a Linux RPM, it will create the SLIB directory `/usr/share/slib'. @@ -15441,14 +15641,14 @@ this might be `/usr/share/slib', `/usr/local/lib/slib', or `/usr/lib/slib'. If you know where SLIB should go on other platforms, please inform agj @ alum.mit.edu. -8.1.2 Install documentation and slib script | -------------------------------------------- | - | - make infoz | - make install | - | -8.1.3 Configure Scheme Implementation to Locate SLIB | ----------------------------------------------------- | +8.1.2 Install documentation and slib script +------------------------------------------- + + make infoz + make install + +8.1.3 Configure Scheme Implementation to Locate SLIB +---------------------------------------------------- If the Scheme implementation supports `getenv', then the value of the shell environment variable SCHEME_LIBRARY_PATH will be used for @@ -15460,8 +15660,8 @@ supports `getenv' but does not use it for determining The `(library-vicinity)' can also be specified from the SLIB initialization file or by implementation-specific means. -8.1.4 Loading SLIB Initialization File | --------------------------------------- | +8.1.4 Loading SLIB Initialization File +-------------------------------------- Check the manifest in `README' to find a configuration file for your Scheme implementation. Initialization files for most IEEE P1178 @@ -15475,8 +15675,8 @@ the file for how to configure it. Once this is done, modify the startup file for your Scheme implementation to `load' this initialization file. -8.1.5 Build New SLIB Catalog for Implementation | ------------------------------------------------ | +8.1.5 Build New SLIB Catalog for Implementation +----------------------------------------------- When SLIB is first used from an implementation, a file named `slibcat' is written to the `implementation-vicinity' for that implementation. @@ -15496,65 +15696,65 @@ SLIB-installed scheme implementation, type: (require 'new-catalog) (slib:exit) -8.1.6 Implementation-specific Instructions | ------------------------------------------- | +8.1.6 Implementation-specific Instructions +------------------------------------------ Multiple implementations of Scheme can all use the same SLIB directory. Simply configure each implementation's initialization file as outlined above. - -- Implementation: SCM | + -- Implementation: SCM The SCM implementation does not require any initialization file as SLIB support is already built into SCM. See the documentation with SCM for installation instructions. - -- Implementation: PLT Scheme | - -- Implementation: DrScheme | - -- Implementation: MzScheme | - The `init.ss' file in the _slibinit_ collection is an SLIB | - initialization file. | - | - To use SLIB in MzScheme, set the SCHEME_LIBRARY_PATH environment | - variable to the installed SLIB location; then invoke MzScheme thus: | - | - `mzscheme -f ${SCHEME_LIBRARY_PATH}DrScheme.init' | - | - -- Implementation: MIT Scheme | - `scheme -load ${SCHEME_LIBRARY_PATH}mitscheme.init' | - | - -- Implementation: Gambit-C 3.0 | - `$command -:s ${SCHEME_LIBRARY_PATH}gambit.init -' | - | - -- Implementation: Guile | - Guile versions 1.6 and earlier link to an archaic SLIB version. In | - RedHat or Fedora installations: | - | - rm /usr/share/guile/slib | - ln -s ${SCHEME_LIBRARY_PATH} /usr/share/guile/slib | - | - In Debian installations: | - | - rm /usr/share/guile/1.6/slib | - ln -s ${SCHEME_LIBRARY_PATH} /usr/share/guile/1.6/slib | - | - `${SCHEME_LIBRARY_PATH}' is where SLIB gets installed. | - | - Guile with SLIB can then be started thus: | - | - `guile -l ${SCHEME_LIBRARY_PATH}guile.init' | - | - -- Implementation: Scheme48 | - To make a Scheme48 image for an installation under `<prefix>', | - | - 1. `cd' to the SLIB directory | - | - 2. type `make prefix=<prefix> slib48'. | - | - 3. To install the image, type `make prefix=<prefix> install48'. | - This will also create a shell script with the name `slib48' | - which will invoke the saved image. | - | - -- Implementation: VSCM | + -- Implementation: PLT Scheme + -- Implementation: DrScheme + -- Implementation: MzScheme + The `init.ss' file in the _slibinit_ collection is an SLIB + initialization file. + + To use SLIB in MzScheme, set the SCHEME_LIBRARY_PATH environment + variable to the installed SLIB location; then invoke MzScheme thus: + + `mzscheme -f ${SCHEME_LIBRARY_PATH}DrScheme.init' + + -- Implementation: MIT Scheme + `scheme -load ${SCHEME_LIBRARY_PATH}mitscheme.init' + + -- Implementation: Gambit-C 3.0 + `$command -:s ${SCHEME_LIBRARY_PATH}gambit.init -' + + -- Implementation: Guile + Guile versions 1.6 and earlier link to an archaic SLIB version. In + RedHat or Fedora installations: + + rm /usr/share/guile/slib + ln -s ${SCHEME_LIBRARY_PATH} /usr/share/guile/slib + + In Debian installations: + + rm /usr/share/guile/1.6/slib + ln -s ${SCHEME_LIBRARY_PATH} /usr/share/guile/1.6/slib + + `${SCHEME_LIBRARY_PATH}' is where SLIB gets installed. + + Guile with SLIB can then be started thus: + + `guile -l ${SCHEME_LIBRARY_PATH}guile.init' + + -- Implementation: Scheme48 + To make a Scheme48 image for an installation under `<prefix>', + + 1. `cd' to the SLIB directory + + 2. type `make prefix=<prefix> slib48'. + + 3. To install the image, type `make prefix=<prefix> install48'. + This will also create a shell script with the name `slib48' + which will invoke the saved image. + + -- Implementation: VSCM From: Matthias Blume <blume @ cs.Princeton.EDU> Date: Tue, 1 Mar 1994 11:42:31 -0500 @@ -15580,26 +15780,26 @@ above. File: slib.info, Node: The SLIB script, Next: Porting, Prev: Installation, Up: About SLIB - | -8.2 The SLIB script | -=================== | -SLIB comes with shell script for Unix platforms. | +8.2 The SLIB script +=================== - slib [ scm | gsi | mzscheme | guile | slib48 | scheme48 | scmlit ] | - | +SLIB comes with shell script for Unix platforms. + + slib [ scm | gsi | mzscheme | guile | slib48 | scheme48 | scmlit ] -Starts an interactive Scheme-with-SLIB session. | -The optional argument to the `slib' script is the Scheme implementation | -to run. Absent the argument, it searches for implementations in the | -above order. | +Starts an interactive Scheme-with-SLIB session. + +The optional argument to the `slib' script is the Scheme implementation +to run. Absent the argument, it searches for implementations in the +above order. File: slib.info, Node: Porting, Next: Coding Guidelines, Prev: The SLIB script, Up: About SLIB - | -8.3 Porting | -=========== | + +8.3 Porting +=========== If there is no initialization file for your Scheme implementation, you will have to create one. Your Scheme implementation must be largely @@ -15635,8 +15835,8 @@ Language Scheme' implementation, then you will need to finish writing File: slib.info, Node: Coding Guidelines, Next: Copyrights, Prev: Porting, Up: About SLIB -8.4 Coding Guidelines | -===================== | +8.4 Coding Guidelines +===================== All library packages are written in IEEE P1178 Scheme and assume that a configuration file and `require.scm' package have already been loaded. @@ -15670,8 +15870,8 @@ but documentation must be provided. which tests your code. Please run this test _before_ you send me the code! -8.4.1 Modifications | -------------------- | +8.4.1 Modifications +------------------- Please document your changes. A line or two for `ChangeLog' is sufficient for simple fixes or extensions. Look at the format of @@ -15694,8 +15894,8 @@ fixes. File: slib.info, Node: Copyrights, Next: About this manual, Prev: Coding Guidelines, Up: About SLIB -8.5 Copyrights | -============== | +8.5 Copyrights +============== This section has instructions for SLIB authors regarding copyrights. @@ -15707,8 +15907,8 @@ modify it. The comments at the beginning of `require.scm' and If your code or changes amount to less than about 10 lines, you do not need to add your copyright or send a disclaimer. -8.5.1 Putting code into the Public Domain | ------------------------------------------ | +8.5.1 Putting code into the Public Domain +----------------------------------------- In order to put code in the public domain you should sign a copyright disclaimer and send it to the SLIB maintainer. Contact agj @ @@ -15735,8 +15935,8 @@ and have your employer sign it. Mail the signed disclaimer to the SLIB maintainer. Contact agj @ alum.mit.edu for the address to mail the disclaimer to. An example disclaimer follows. -8.5.2 Explicit copying terms | ----------------------------- | +8.5.2 Explicit copying terms +---------------------------- If you submit more than about 10 lines of code which you are not placing into the Public Domain (by sending me a disclaimer) you need to: @@ -15753,8 +15953,8 @@ placing into the Public Domain (by sending me a disclaimer) you need to: disclaim to the SLIB maintainer. Contact agj @ alum.mit.edu for the address to mail the disclaimer to. -8.5.3 Example: Company Copyright Disclaimer | -------------------------------------------- | +8.5.3 Example: Company Copyright Disclaimer +------------------------------------------- This disclaimer should be signed by a vice president or general manager of the company. If you can't get at them, anyone else authorized to @@ -15773,8 +15973,8 @@ license out software produced there will do. Here is a sample wording: File: slib.info, Node: About this manual, Prev: Copyrights, Up: About SLIB -8.6 About this manual | -===================== | +8.6 About this manual +===================== * Entries that are labeled as Functions are called for their return values. Entries that are labeled as Procedures are called @@ -15784,1938 +15984,1960 @@ File: slib.info, Node: About this manual, Prev: Copyrights, Up: About SLIB implementation. * At the beginning of each section, there is a line that looks like `(require - 'feature)'. Include this line in your code prior to using the | - package. | + 'feature)'. Include this line in your code prior to using the + package. File: slib.info, Node: Index, Prev: About SLIB, Up: Top -Index | -***** | - | +Index +***** + Procedure and Macro Index ************************* This is an alphabetical list of all the procedures and macros in SLIB. - + * Menu: * -: Multi-argument / and -. - (line 14) | -* -1+: Rev2 Procedures. (line 42) | + (line 14) +* -1+: Rev2 Procedures. (line 42) * /: Multi-argument / and -. - (line 12) | -* 1+: Rev2 Procedures. (line 39) | -* <=?: Rev2 Procedures. (line 46) | -* <?: Rev2 Procedures. (line 45) | -* =: Hilbert Space-Filling Curve. | - (line 72) | -* =?: Rev2 Procedures. (line 47) | -* >=?: Rev2 Procedures. (line 49) | -* >?: Rev2 Procedures. (line 48) | -* a:bool: Arrays. (line 236) | -* a:fixn16b: Arrays. (line 226) | -* a:fixn32b: Arrays. (line 221) | -* a:fixn64b: Arrays. (line 216) | -* a:fixn8b: Arrays. (line 231) | -* a:fixz16b: Arrays. (line 206) | -* a:fixz32b: Arrays. (line 201) | -* a:fixz64b: Arrays. (line 196) | -* a:fixz8b: Arrays. (line 211) | -* a:floc128b: Arrays. (line 149) | -* a:floc16b: Arrays. (line 161) | -* a:floc32b: Arrays. (line 157) | -* a:floc64b: Arrays. (line 153) | -* a:flor128b: Arrays. (line 165) | -* a:flor16b: Arrays. (line 177) | -* a:flor32b: Arrays. (line 173) | -* a:flor64b: Arrays. (line 169) | -* abort: Session Support. (line 9) | -* absolute-path?: URI. (line 102) | -* absolute-uri?: URI. (line 98) | -* add-command-tables: Database Extension. (line 11) | -* add-domain: Using Databases. (line 131) | -* add-domain on relational-database: Command Intrinsics. (line 10) | -* add-macro-support: Within-database. (line 52) | -* add-process!: Multi-Processing. (line 14) | -* add-setter: Setters. (line 43) | -* adjoin: Lists as sets. (line 10) | -* adjoin-parameters!: Parameter lists. (line 38) | + (line 12) +* 1+: Rev2 Procedures. (line 39) +* <=?: Rev2 Procedures. (line 46) +* <?: Rev2 Procedures. (line 45) +* =: Hilbert Space-Filling Curve. + (line 72) +* =?: Rev2 Procedures. (line 47) +* >=?: Rev2 Procedures. (line 49) +* >?: Rev2 Procedures. (line 48) +* a:bool: Arrays. (line 236) +* a:fixn16b: Arrays. (line 226) +* a:fixn32b: Arrays. (line 221) +* a:fixn64b: Arrays. (line 216) +* a:fixn8b: Arrays. (line 231) +* a:fixz16b: Arrays. (line 206) +* a:fixz32b: Arrays. (line 201) +* a:fixz64b: Arrays. (line 196) +* a:fixz8b: Arrays. (line 211) +* a:floc128b: Arrays. (line 149) +* a:floc16b: Arrays. (line 161) +* a:floc32b: Arrays. (line 157) +* a:floc64b: Arrays. (line 153) +* a:flor128b: Arrays. (line 165) +* a:flor16b: Arrays. (line 177) +* a:flor32b: Arrays. (line 173) +* a:flor64b: Arrays. (line 169) +* abort: Session Support. (line 9) +* absolute-path?: URI. (line 102) +* absolute-uri?: URI. (line 98) +* add-command-tables: Database Extension. (line 11) +* add-domain: Using Databases. (line 131) +* add-domain on relational-database: Command Intrinsics. (line 10) +* add-macro-support: Within-database. (line 52) +* add-process!: Multi-Processing. (line 14) +* add-setter: Setters. (line 43) +* adjoin: Lists as sets. (line 10) +* adjoin-parameters!: Parameter lists. (line 38) * alist->wt-tree: Construction of Weight-Balanced Trees. - (line 65) | -* alist-associator: Association Lists. (line 28) | -* alist-cons: SRFI-1. (line 178) | -* alist-copy: SRFI-1. (line 180) | -* alist-delete: SRFI-1. (line 182) | -* alist-delete!: SRFI-1. (line 185) | -* alist-for-each: Association Lists. (line 53) | -* alist-inquirer: Association Lists. (line 23) | -* alist-map: Association Lists. (line 48) | -* alist-remover: Association Lists. (line 39) | -* alist-table: The Base. (line 12) | -* and-let*: SRFI-2. (line 9) | -* and?: Non-List functions. (line 7) | -* any: SRFI-1. (line 156) | -* any-bits-set?: Bit-Twiddling. (line 64) | -* any?: Collections. (line 83) | -* append!: Rev2 Procedures. (line 36) | -* append-reverse: SRFI-1. (line 95) | -* append-reverse!: SRFI-1. (line 96) | + (line 65) +* alist-associator: Association Lists. (line 28) +* alist-cons: SRFI-1. (line 178) +* alist-copy: SRFI-1. (line 180) +* alist-delete: SRFI-1. (line 182) +* alist-delete!: SRFI-1. (line 185) +* alist-for-each: Association Lists. (line 53) +* alist-inquirer: Association Lists. (line 23) +* alist-map: Association Lists. (line 48) +* alist-remover: Association Lists. (line 39) +* alist-table: The Base. (line 12) +* and-let*: Guarded LET* special form. | + (line 9) | +* and?: Non-List functions. (line 7) +* any: SRFI-1. (line 156) +* any-bits-set?: Bit-Twiddling. (line 64) +* any?: Collections. (line 83) +* append!: Rev2 Procedures. (line 36) +* append-reverse: SRFI-1. (line 95) +* append-reverse!: SRFI-1. (line 96) * apply: Multi-argument Apply. - (line 12) | -* arithmetic-shift: Bit-Twiddling. (line 182) | -* array->list: Arrays. (line 101) | -* array->vector: Arrays. (line 124) | -* array-dimensions: Arrays. (line 48) | -* array-for-each: Array Mapping. (line 25) | -* array-in-bounds?: Arrays. (line 133) | -* array-index-map!: Array Mapping. (line 34) | -* array-indexes: Array Mapping. (line 29) | -* array-map: Array Mapping. (line 17) | -* array-map!: Array Mapping. (line 9) | -* array-rank: Arrays. (line 44) | -* array-ref: Arrays. (line 136) | -* array-set!: Arrays. (line 139) | -* array-trim: Subarrays. (line 44) | -* array:copy!: Array Mapping. (line 50) | -* array?: Arrays. (line 9) | -* asctime: Posix Time. (line 62) | -* ash: Bit-Twiddling. (line 181) | -* assoc: SRFI-1. (line 175) | -* atom?: Non-List functions. (line 30) | -* batch:call-with-output-script: Batch. (line 47) | -* batch:command: Batch. (line 64) | -* batch:comment: Batch. (line 95) | -* batch:delete-file: Batch. (line 102) | -* batch:initialize!: Batch. (line 36) | -* batch:lines->file: Batch. (line 98) | -* batch:rename-file: Batch. (line 106) | -* batch:run-script: Batch. (line 88) | -* batch:try-chopped-command: Batch. (line 76) | -* batch:try-command: Batch. (line 72) | -* bit-count: Bit-Twiddling. (line 74) | -* bit-field: Bit-Twiddling. (line 156) | -* bit-set?: Bit-Twiddling. (line 135) | + (line 12) +* arithmetic-shift: Bit-Twiddling. (line 182) +* array->list: Arrays. (line 101) +* array->vector: Arrays. (line 124) +* array-dimensions: Arrays. (line 48) +* array-for-each: Array Mapping. (line 25) +* array-in-bounds?: Arrays. (line 133) +* array-index-map!: Array Mapping. (line 34) +* array-indexes: Array Mapping. (line 29) +* array-map: Array Mapping. (line 17) +* array-map!: Array Mapping. (line 9) +* array-rank: Arrays. (line 44) +* array-ref: Arrays. (line 136) +* array-set!: Arrays. (line 139) +* array-trim: Subarrays. (line 44) +* array:copy!: Array Mapping. (line 50) +* array?: Arrays. (line 9) +* asctime: Posix Time. (line 62) +* ash: Bit-Twiddling. (line 181) +* assoc: SRFI-1. (line 175) +* atom?: Non-List functions. (line 30) +* batch:call-with-output-script: Batch. (line 47) +* batch:command: Batch. (line 64) +* batch:comment: Batch. (line 95) +* batch:delete-file: Batch. (line 102) +* batch:initialize!: Batch. (line 36) +* batch:lines->file: Batch. (line 98) +* batch:rename-file: Batch. (line 106) +* batch:run-script: Batch. (line 88) +* batch:try-chopped-command: Batch. (line 76) +* batch:try-command: Batch. (line 72) +* bit-count: Bit-Twiddling. (line 74) +* bit-field: Bit-Twiddling. (line 156) +* bit-set?: Bit-Twiddling. (line 135) * bitwise-and: Bit-Twiddling. (line 19) | -* bitwise-delaminate: Hilbert Space-Filling Curve. | - (line 90) | -* bitwise-if: Bit-Twiddling. (line 56) | +* bitwise-if: Bit-Twiddling. (line 56) * bitwise-ior: Bit-Twiddling. (line 28) | -* bitwise-laminate: Hilbert Space-Filling Curve. | - (line 89) | -* bitwise-merge: Bit-Twiddling. (line 57) | -* bitwise-not: Bit-Twiddling. (line 46) | -* bitwise-xor: Bit-Twiddling. (line 37) | -* blackbody-spectrum: Spectra. (line 125) | -* booleans->integer: Bit-Twiddling. (line 229) | -* break <1>: Breakpoints. (line 28) | -* break: SRFI-1. (line 152) | -* break!: SRFI-1. (line 154) | -* break-all: Debug. (line 31) | -* breakf: Breakpoints. (line 47) | -* breakpoint: Breakpoints. (line 16) | -* browse: Database Browser. (line 9) | -* browse-url: System. (line 60) | -* butlast: Lists as sequences. (line 121) | -* butnthcdr: Lists as sequences. (line 147) | -* byte-ref: Byte. (line 14) | -* byte-set!: Byte. (line 18) | -* bytes: Byte. (line 32) | +* bitwise-merge: Bit-Twiddling. (line 57) +* bitwise-not: Bit-Twiddling. (line 46) +* bitwise-xor: Bit-Twiddling. (line 37) +* blackbody-spectrum: Spectra. (line 125) +* booleans->integer: Bit-Twiddling. (line 229) +* break <1>: Breakpoints. (line 28) +* break: SRFI-1. (line 152) +* break!: SRFI-1. (line 154) +* break-all: Debug. (line 31) +* breakf: Breakpoints. (line 47) +* breakpoint: Breakpoints. (line 16) +* browse: Database Browser. (line 9) +* browse-url: System. (line 60) +* butlast: Lists as sequences. (line 121) +* butnthcdr: Lists as sequences. (line 147) +* byte-ref: Byte. (line 14) +* byte-set!: Byte. (line 18) +* bytes: Byte. (line 32) * bytes->ieee-double: Byte/Number Conversions. - (line 58) | + (line 60) | * bytes->ieee-float: Byte/Number Conversions. - (line 41) | + (line 41) * bytes->integer: Byte/Number Conversions. - (line 17) | -* bytes->list: Byte. (line 36) | -* bytes-copy: Byte. (line 47) | -* bytes-length: Byte. (line 29) | -* bytes-reverse: Byte. (line 53) | -* bytes-reverse!: Byte. (line 50) | -* call-with-dynamic-binding: Dynamic Data Type. (line 25) | -* call-with-input-string: String Ports. (line 15) | -* call-with-open-ports: Input/Output. (line 54) | -* call-with-output-string: String Ports. (line 9) | -* call-with-tmpnam: Filenames. (line 74) | -* call-with-values: Values. (line 13) | -* capture-syntactic-environment: Syntactic Closures. (line 211) | -* car+cdr: SRFI-1. (line 68) | + (line 17) +* bytes->list: Byte. (line 36) +* bytes-copy: Byte. (line 47) +* bytes-length: Byte. (line 29) +* bytes-reverse: Byte. (line 53) +* bytes-reverse!: Byte. (line 50) +* call-with-dynamic-binding: Dynamic Data Type. (line 25) +* call-with-input-string: String Ports. (line 15) +* call-with-open-ports: Input/Output. (line 54) +* call-with-output-string: String Ports. (line 9) +* call-with-tmpnam: Filenames. (line 74) +* call-with-values: Values. (line 13) +* capture-syntactic-environment: Syntactic Closures. (line 211) +* car+cdr: SRFI-1. (line 68) * cart-prod-tables on relational-database: Database Operations. - (line 78) | -* catalog->html: HTML Tables. (line 49) | -* catalog-id on base-table: Base Tables. (line 30) | -* catalog:read: Catalog Vicinities. (line 57) | -* cdna:base-count: NCBI-DNA. (line 35) | -* cdna:report-base-count: NCBI-DNA. (line 39) | -* cgi:serve-query: HTTP and CGI. (line 69) | -* chap:next-string: Chapter Ordering. (line 29) | -* chap:string<=?: Chapter Ordering. (line 25) | -* chap:string<?: Chapter Ordering. (line 14) | -* chap:string>=?: Chapter Ordering. (line 26) | -* chap:string>?: Chapter Ordering. (line 24) | -* check-parameters: Parameter lists. (line 59) | -* chromaticity->CIEXYZ: Spectra. (line 169) | -* chromaticity->whitepoint: Spectra. (line 172) | + (line 78) +* catalog->html: HTML Tables. (line 49) +* catalog-id on base-table: Base Tables. (line 30) +* catalog:read: Catalog Vicinities. (line 57) +* cdna:base-count: NCBI-DNA. (line 35) +* cdna:report-base-count: NCBI-DNA. (line 39) +* cgi:serve-query: HTTP and CGI. (line 69) +* chap:next-string: Chapter Ordering. (line 29) +* chap:string<=?: Chapter Ordering. (line 25) +* chap:string<?: Chapter Ordering. (line 14) +* chap:string>=?: Chapter Ordering. (line 26) +* chap:string>?: Chapter Ordering. (line 24) +* check-parameters: Parameter lists. (line 59) +* chromaticity->CIEXYZ: Spectra. (line 169) +* chromaticity->whitepoint: Spectra. (line 172) * CIE:DE*: Color Difference Metrics. - (line 20) | + (line 20) * CIE:DE*94: Color Difference Metrics. - (line 27) | -* ciexyz->color: Color Spaces. (line 25) | -* CIEXYZ->e-sRGB: Color Conversions. (line 56) | -* CIEXYZ->L*a*b*: Color Conversions. (line 38) | -* CIEXYZ->L*u*v*: Color Conversions. (line 32) | -* CIEXYZ->RGB709: Color Conversions. (line 29) | -* CIEXYZ->sRGB: Color Conversions. (line 47) | -* CIEXYZ->xRGB: Color Conversions. (line 50) | -* circular-list: SRFI-1. (line 32) | -* circular-list?: SRFI-1. (line 40) | -* cksum: Cyclic Checksum. (line 149) | -* clear-sky-color-xyy: Daylight. (line 84) | -* clip-to-rect: Rectangles. (line 36) | -* close-base on base-table: The Base. (line 60) | -* close-database: Using Databases. (line 89) | -* close-database on relational-database: Database Operations. (line 20) | -* close-port: Input/Output. (line 47) | + (line 27) +* ciexyz->color: Color Spaces. (line 25) +* CIEXYZ->e-sRGB: Color Conversions. (line 56) +* CIEXYZ->L*a*b*: Color Conversions. (line 38) +* CIEXYZ->L*u*v*: Color Conversions. (line 32) +* CIEXYZ->RGB709: Color Conversions. (line 29) +* CIEXYZ->sRGB: Color Conversions. (line 47) +* CIEXYZ->xRGB: Color Conversions. (line 50) +* circular-list: SRFI-1. (line 32) +* circular-list?: SRFI-1. (line 40) +* cksum: Cyclic Checksum. (line 149) +* clear-sky-color-xyy: Daylight. (line 84) +* clip-to-rect: Rectangles. (line 36) +* close-base on base-table: The Base. (line 60) +* close-database: Using Databases. (line 89) +* close-database on relational-database: Database Operations. (line 20) +* close-port: Input/Output. (line 47) * close-table on relational-table: Table Administration. - (line 20) | + (line 20) * CMC-DE: Color Difference Metrics. - (line 61) | + (line 61) * CMC:DE*: Color Difference Metrics. - (line 65) | -* codons<-cdna: NCBI-DNA. (line 18) | -* coerce: Type Coercion. (line 12) | -* collection?: Collections. (line 36) | -* color->ciexyz: Color Spaces. (line 34) | -* color->e-srgb: Color Spaces. (line 252) | -* color->l*a*b*: Color Spaces. (line 91) | -* color->l*c*h: Color Spaces. (line 166) | -* color->l*u*v*: Color Spaces. (line 115) | -* color->rgb709: Color Spaces. (line 55) | -* color->srgb: Color Spaces. (line 209) | -* color->string: Color Data-Type. (line 95) | -* color->xrgb: Color Spaces. (line 212) | -* color-dictionaries->lookup: Color Names. (line 33) | -* color-dictionary: Color Names. (line 40) | -* color-name->color: Color Names. (line 27) | -* color-name:canonicalize: Color Names. (line 23) | -* color-precision: Color Data-Type. (line 46) | -* color-space: Color Data-Type. (line 43) | -* color-white-point: Color Data-Type. (line 51) | -* color:ciexyz: Color Spaces. (line 30) | -* color:e-srgb: Color Spaces. (line 241) | -* color:l*a*b*: Color Spaces. (line 83) | -* color:l*c*h: Color Spaces. (line 159) | -* color:l*u*v*: Color Spaces. (line 107) | -* color:linear-transform: Color Conversions. (line 27) | -* color:rgb709: Color Spaces. (line 51) | -* color:srgb: Color Spaces. (line 200) | -* color?: Color Data-Type. (line 9) | + (line 65) +* codons<-cdna: NCBI-DNA. (line 18) +* coerce: Type Coercion. (line 12) +* collection?: Collections. (line 36) +* color->ciexyz: Color Spaces. (line 34) +* color->e-srgb: Color Spaces. (line 252) +* color->l*a*b*: Color Spaces. (line 91) +* color->l*c*h: Color Spaces. (line 166) +* color->l*u*v*: Color Spaces. (line 115) +* color->rgb709: Color Spaces. (line 55) +* color->srgb: Color Spaces. (line 209) +* color->string: Color Data-Type. (line 95) +* color->xrgb: Color Spaces. (line 212) +* color-dictionaries->lookup: Color Names. (line 33) +* color-dictionary: Color Names. (line 40) +* color-name->color: Color Names. (line 27) +* color-name:canonicalize: Color Names. (line 23) +* color-precision: Color Data-Type. (line 46) +* color-space: Color Data-Type. (line 43) +* color-white-point: Color Data-Type. (line 51) +* color:ciexyz: Color Spaces. (line 30) +* color:e-srgb: Color Spaces. (line 241) +* color:l*a*b*: Color Spaces. (line 83) +* color:l*c*h: Color Spaces. (line 159) +* color:l*u*v*: Color Spaces. (line 107) +* color:linear-transform: Color Conversions. (line 27) +* color:rgb709: Color Spaces. (line 51) +* color:srgb: Color Spaces. (line 200) +* color?: Color Data-Type. (line 9) * column-domains on relational-table: Table Administration. - (line 9) | + (line 9) * column-foreigns on relational-table: Table Administration. - (line 8) | + (line 8) * column-names on relational-table: Table Administration. - (line 7) | -* column-range: Column Ranges. (line 10) | + (line 7) +* column-range: Column Ranges. (line 10) * column-types on relational-table: Table Administration. - (line 10) | -* combine-ranges: Column Ranges. (line 19) | -* combined-rulesets: Commutative Rings. (line 90) | -* command->p-specs: HTML. (line 149) | -* command:make-editable-table: HTML Tables. (line 98) | -* command:modify-table: HTML Tables. (line 87) | -* concatenate: SRFI-1. (line 90) | -* concatenate!: SRFI-1. (line 91) | -* cond-expand: SRFI. (line 20) | -* cons*: SRFI-1. (line 22) | -* continue: Breakpoints. (line 20) | -* convert-color: Color Data-Type. (line 54) | -* copy-bit: Bit-Twiddling. (line 144) | -* copy-bit-field: Bit-Twiddling. (line 167) | -* copy-list: List construction. (line 32) | + (line 10) +* combine-ranges: Column Ranges. (line 19) +* combined-rulesets: Commutative Rings. (line 90) +* command->p-specs: HTML. (line 149) +* command:make-editable-table: HTML Tables. (line 98) +* command:modify-table: HTML Tables. (line 87) +* concatenate: SRFI-1. (line 90) +* concatenate!: SRFI-1. (line 91) +* cond: Guarded COND Clause. (line 11) | +* cond-expand: SRFI. (line 12) | +* cons*: SRFI-1. (line 22) +* continue: Breakpoints. (line 20) +* convert-color: Color Data-Type. (line 54) +* copy-bit: Bit-Twiddling. (line 144) +* copy-bit-field: Bit-Twiddling. (line 167) +* copy-list: List construction. (line 32) * copy-random-state: Exact Random Numbers. - (line 29) | -* copy-tree: Tree Operations. (line 33) | -* count: SRFI-1. (line 106) | -* count-newlines: String Search. (line 61) | -* crc16: Cyclic Checksum. (line 167) | -* crc5: Cyclic Checksum. (line 178) | -* crc:make-table: Cyclic Checksum. (line 131) | -* create-array: Arrays. (line 66) | -* create-database: Using Databases. (line 43) | + (line 29) +* copy-tree: Tree Operations. (line 33) +* count: SRFI-1. (line 106) +* count-newlines: String Search. (line 61) +* crc16: Cyclic Checksum. (line 167) +* crc5: Cyclic Checksum. (line 178) +* crc:make-table: Cyclic Checksum. (line 131) +* create-array: Arrays. (line 66) +* create-database: Using Databases. (line 43) * create-database on relational-system: Relational Database Objects. - (line 34) | -* create-postscript-graph: PostScript Graphing. (line 17) | -* create-table on relational-database: Database Operations. (line 64) | -* create-view on relational-database: Database Operations. (line 75) | -* cring:define-rule: Commutative Rings. (line 116) | -* ctime: Posix Time. (line 68) | -* current-directory: Directories. (line 9) | -* current-error-port: Input/Output. (line 70) | -* current-input-port <1>: Byte. (line 74) | + (line 34) +* create-postscript-graph: PostScript Graphing. (line 17) +* create-table on relational-database: Database Operations. (line 64) +* create-view on relational-database: Database Operations. (line 75) +* cring:define-rule: Commutative Rings. (line 116) +* ctime: Posix Time. (line 68) +* current-directory: Directories. (line 9) +* current-error-port: Input/Output. (line 70) +* current-input-port <1>: Byte. (line 74) * current-input-port: Ruleset Definition and Use. - (line 57) | -* current-output-port: Byte. (line 66) | -* current-time: Time and Date. (line 20) | -* cvs-directories: CVS. (line 14) | -* cvs-files: CVS. (line 9) | -* cvs-repository: CVS. (line 22) | -* cvs-root: CVS. (line 18) | -* cvs-set-root!: CVS. (line 27) | -* cvs-set-roots!: CVS. (line 30) | -* cvs-vet: CVS. (line 34) | -* db->html-directory: HTML Tables. (line 147) | -* db->html-files: HTML Tables. (line 137) | -* db->netscape: HTML Tables. (line 158) | -* decode-universal-time: Common-Lisp Time. (line 15) | -* define-*commands*: Database Extension. (line 16) | -* define-access-operation: Setters. (line 53) | -* define-command: Within-database. (line 17) | -* define-domains: Using Databases. (line 124) | -* define-macro: Within-database. (line 58) | -* define-operation: Yasos interface. (line 7) | -* define-predicate: Yasos interface. (line 12) | -* define-record-type: SRFI-9. (line 12) | -* define-structure: Define-Structure. (line 12) | -* define-syntax: Macro by Example. (line 39) | -* define-table: Within-database. (line 26) | -* define-tables: Using Databases. (line 134) | -* defmacro: Defmacro. (line 40) | -* defmacro:eval: Defmacro. (line 15) | -* defmacro:expand*: Defmacro. (line 51) | -* defmacro:load: Defmacro. (line 19) | -* defmacro?: Defmacro. (line 27) | -* delaminate-list: Hilbert Space-Filling Curve. | - (line 108) | -* delay: Promises. (line 15) | + (line 57) +* current-output-port: Byte. (line 66) +* current-time: Time and Date. (line 20) +* cvs-directories: CVS. (line 14) +* cvs-files: CVS. (line 9) +* cvs-repository: CVS. (line 22) +* cvs-root: CVS. (line 18) +* cvs-set-root!: CVS. (line 27) +* cvs-set-roots!: CVS. (line 30) +* cvs-vet: CVS. (line 34) +* db->html-directory: HTML Tables. (line 147) +* db->html-files: HTML Tables. (line 137) +* db->netscape: HTML Tables. (line 158) +* decode-universal-time: Common-Lisp Time. (line 15) +* define-*commands*: Database Extension. (line 16) +* define-access-operation: Setters. (line 53) +* define-command: Within-database. (line 17) +* define-domains: Using Databases. (line 124) +* define-macro: Within-database. (line 58) +* define-operation: Yasos interface. (line 7) +* define-predicate: Yasos interface. (line 12) +* define-record-type: Define-Record-Type. (line 12) | +* define-structure: Define-Structure. (line 12) +* define-syntax: Macro by Example. (line 39) +* define-table: Within-database. (line 26) +* define-tables: Using Databases. (line 134) +* defmacro: Defmacro. (line 40) +* defmacro:eval: Defmacro. (line 15) +* defmacro:expand*: Defmacro. (line 51) +* defmacro:load: Defmacro. (line 19) +* defmacro?: Defmacro. (line 27) +* delaminate-list: Hilbert Space-Filling Curve. + (line 89) | +* delay: Promises. (line 15) * delete: Destructive list operations. - (line 58) | + (line 58) * delete on base-table: Base Record Operations. - (line 37) | + (line 37) * delete* on base-table: Aggregate Base Operations. - (line 11) | -* delete-domain on relational-database: Command Intrinsics. (line 39) | -* delete-duplicates: SRFI-1. (line 166) | -* delete-duplicates!: SRFI-1. (line 169) | -* delete-file: Input/Output. (line 14) | + (line 11) +* delete-domain on relational-database: Command Intrinsics. (line 39) +* delete-duplicates: SRFI-1. (line 166) +* delete-duplicates!: SRFI-1. (line 169) +* delete-file: Input/Output. (line 14) * delete-if: Destructive list operations. - (line 59) | + (line 59) * delete-if-not: Destructive list operations. - (line 60) | -* delete-table on relational-database: Database Operations. (line 59) | -* dequeue!: Queues. (line 28) | -* dequeue-all!: Queues. (line 36) | -* determinant: Matrix Algebra. (line 18) | -* diff:edit-length: Sequence Comparison. (line 64) | -* diff:edits: Sequence Comparison. (line 45) | -* diff:longest-common-subsequence: Sequence Comparison. (line 32) | -* difftime: Time and Date. (line 26) | -* directory-for-each: Directories. (line 21) | -* do-elts: Collections. (line 41) | -* do-keys: Collections. (line 57) | -* domain-checker on relational-database: Command Intrinsics. (line 42) | -* dotted-list?: SRFI-1. (line 42) | -* drop: SRFI-1. (line 70) | -* drop-right: SRFI-1. (line 76) | -* drop-right!: SRFI-1. (line 78) | -* dynamic-ref: Dynamic Data Type. (line 17) | -* dynamic-set!: Dynamic Data Type. (line 21) | -* dynamic-wind: Dynamic-Wind. (line 13) | -* dynamic?: Dynamic Data Type. (line 12) | -* e-sRGB->CIEXYZ: Color Conversions. (line 57) | -* e-srgb->color: Color Spaces. (line 235) | -* e-sRGB->e-sRGB: Color Conversions. (line 68) | -* e-sRGB->sRGB: Color Conversions. (line 60) | -* eighth: SRFI-1. (line 64) | -* emacs:backup-name: Transactions. (line 73) | -* empty?: Collections. (line 99) | -* encode-universal-time: Common-Lisp Time. (line 40) | -* enqueue!: Queues. (line 25) | -* equal? <1>: Byte. (line 44) | -* equal?: Arrays. (line 19) | -* eval: Eval. (line 9) | -* every: Lists as sets. (line 91) | -* every?: Collections. (line 91) | + (line 60) +* delete-table on relational-database: Database Operations. (line 59) +* dequeue!: Queues. (line 28) +* dequeue-all!: Queues. (line 36) +* determinant: Matrix Algebra. (line 18) +* diff:edit-length: Sequence Comparison. (line 64) +* diff:edits: Sequence Comparison. (line 45) +* diff:longest-common-subsequence: Sequence Comparison. (line 32) +* difftime: Time and Date. (line 26) +* directory-for-each: Directories. (line 21) +* do-elts: Collections. (line 41) +* do-keys: Collections. (line 57) +* domain-checker on relational-database: Command Intrinsics. (line 42) +* dotted-list?: SRFI-1. (line 42) +* drop: SRFI-1. (line 70) +* drop-right: SRFI-1. (line 76) +* drop-right!: SRFI-1. (line 78) +* dynamic-ref: Dynamic Data Type. (line 17) +* dynamic-set!: Dynamic Data Type. (line 21) +* dynamic-wind: Dynamic-Wind. (line 13) +* dynamic?: Dynamic Data Type. (line 12) +* e-sRGB->CIEXYZ: Color Conversions. (line 57) +* e-srgb->color: Color Spaces. (line 235) +* e-sRGB->e-sRGB: Color Conversions. (line 68) +* e-sRGB->sRGB: Color Conversions. (line 60) +* eighth: SRFI-1. (line 64) +* emacs:backup-name: Transactions. (line 73) +* empty?: Collections. (line 99) +* encode-universal-time: Common-Lisp Time. (line 40) +* enqueue!: Queues. (line 25) +* equal? <1>: Byte. (line 44) +* equal?: Arrays. (line 19) +* eval: Eval. (line 9) +* every: Lists as sets. (line 91) +* every?: Collections. (line 91) * exports<-info-index: Top-level Variable References. - (line 35) | -* expt: Miscellany. (line 20) | -* extended-euclid: Modular Arithmetic. (line 28) | -* factor: Prime Numbers. (line 41) | -* feature->export-alist: Module Manifests. (line 100) | -* feature->exports: Module Manifests. (line 105) | -* feature->requires: Module Manifests. (line 29) | -* feature->requires*: Module Manifests. (line 45) | -* feature-eval: Feature. (line 52) | + (line 35) +* expt: Miscellany. (line 20) +* extended-euclid: Modular Arithmetic. (line 28) +* factor: Prime Numbers. (line 41) +* feature->export-alist: Module Manifests. (line 100) +* feature->exports: Module Manifests. (line 105) +* feature->requires: Module Manifests. (line 29) +* feature->requires*: Module Manifests. (line 45) +* feature-eval: Feature. (line 52) * fft: Fast Fourier Transform. - (line 9) | + (line 9) * fft-1: Fast Fourier Transform. - (line 14) | -* fifth: SRFI-1. (line 61) | -* file->color-dictionary: Color Names. (line 68) | -* file->definitions: Module Manifests. (line 72) | -* file->exports: Module Manifests. (line 84) | -* file->loads: Module Manifests. (line 53) | -* file->requires: Module Manifests. (line 15) | -* file->requires*: Module Manifests. (line 49) | -* file-exists?: Input/Output. (line 9) | -* file-lock!: Transactions. (line 52) | -* file-lock-owner: Transactions. (line 48) | -* file-unlock!: Transactions. (line 62) | -* filename:match-ci??: Filenames. (line 10) | -* filename:match??: Filenames. (line 9) | -* filename:substitute-ci??: Filenames. (line 35) | -* filename:substitute??: Filenames. (line 34) | -* fill-empty-parameters: Parameter lists. (line 51) | -* fill-rect: Rectangles. (line 30) | -* filter: SRFI-1. (line 129) | -* filter!: SRFI-1. (line 131) | -* find: SRFI-1. (line 144) | -* find-if: Lists as sets. (line 138) | -* find-ratio: Rationalize. (line 20) | -* find-ratio-between: Rationalize. (line 27) | -* find-string-from-port?: String Search. (line 30) | -* find-tail: SRFI-1. (line 146) | -* first: SRFI-1. (line 53) | -* first-set-bit: Bit-Twiddling. (line 100) | -* fluid-let: Fluid-Let. (line 9) | -* fold: SRFI-1. (line 111) | -* fold-right: SRFI-1. (line 113) | -* for-each-elt: Collections. (line 67) | -* for-each-key: Collections. (line 66) | + (line 14) +* fifth: SRFI-1. (line 61) +* file->color-dictionary: Color Names. (line 68) +* file->definitions: Module Manifests. (line 72) +* file->exports: Module Manifests. (line 84) +* file->loads: Module Manifests. (line 53) +* file->requires: Module Manifests. (line 15) +* file->requires*: Module Manifests. (line 49) +* file-exists?: Input/Output. (line 9) +* file-lock!: Transactions. (line 52) +* file-lock-owner: Transactions. (line 48) +* file-unlock!: Transactions. (line 62) +* filename:match-ci??: Filenames. (line 10) +* filename:match??: Filenames. (line 9) +* filename:substitute-ci??: Filenames. (line 35) +* filename:substitute??: Filenames. (line 34) +* fill-empty-parameters: Parameter lists. (line 51) +* fill-rect: Rectangles. (line 30) +* filter: SRFI-1. (line 129) +* filter!: SRFI-1. (line 131) +* find: SRFI-1. (line 144) +* find-if: Lists as sets. (line 138) +* find-ratio: Rationalize. (line 20) +* find-ratio-between: Rationalize. (line 27) +* find-string-from-port?: String Search. (line 30) +* find-tail: SRFI-1. (line 146) +* first: SRFI-1. (line 53) +* first-set-bit: Bit-Twiddling. (line 100) +* fluid-let: Fluid-Let. (line 9) +* fold: SRFI-1. (line 111) +* fold-right: SRFI-1. (line 113) +* for-each-elt: Collections. (line 67) +* for-each-key: Collections. (line 66) * for-each-key on base-table: Aggregate Base Operations. - (line 16) | + (line 16) * for-each-row on relational-table: Multi-Row Operations. - (line 33) | + (line 33) * for-each-row-in-order on relational-table: Sequential Index Operations. - (line 11) | -* force: Promises. (line 11) | -* force-output: Input/Output. (line 74) | -* form:delimited: HTML. (line 138) | -* form:element: HTML. (line 98) | -* form:image: HTML. (line 92) | -* form:reset: HTML. (line 95) | -* form:submit: HTML. (line 84) | -* format: Format Interface. (line 7) | -* fourth: SRFI-1. (line 59) | + (line 11) +* force: Promises. (line 11) +* force-output: Input/Output. (line 74) +* form:delimited: HTML. (line 138) +* form:element: HTML. (line 98) +* form:image: HTML. (line 92) +* form:reset: HTML. (line 95) +* form:submit: HTML. (line 84) +* format: Format Interface. (line 7) +* fourth: SRFI-1. (line 59) * fprintf: Standard Formatted Output. - (line 10) | + (line 10) * fscanf: Standard Formatted Input. - (line 14) | -* gen-elts: Collections. (line 25) | -* gen-keys: Collections. (line 29) | -* generic-write: Generic-Write. (line 15) | -* gentemp: Defmacro. (line 9) | -* get on relational-table: Table Operations. (line 18) | -* get* on relational-table: Match-Keys. (line 29) | -* get-decoded-time: Common-Lisp Time. (line 7) | -* get-foreign-choices: HTML. (line 146) | -* get-method: Object. (line 78) | -* get-universal-time: Common-Lisp Time. (line 10) | -* getenv: System Interface. (line 9) | -* getopt: Getopt. (line 39) | -* getopt--: Getopt. (line 125) | + (line 14) +* gen-elts: Collections. (line 25) +* gen-keys: Collections. (line 29) +* generic-write: Generic-Write. (line 15) +* gentemp: Defmacro. (line 9) +* get on relational-table: Table Operations. (line 18) +* get* on relational-table: Match-Keys. (line 29) +* get-decoded-time: Common-Lisp Time. (line 7) +* get-foreign-choices: HTML. (line 146) +* get-method: Object. (line 78) +* get-universal-time: Common-Lisp Time. (line 10) +* getenv: System Interface. (line 9) +* getopt: Getopt. (line 39) +* getopt--: Getopt. (line 125) * getopt->arglist: Getopt Parameter lists. - (line 37) | + (line 37) * getopt->parameter-list: Getopt Parameter lists. - (line 10) | -* glob-pattern?: URI. (line 110) | -* gmktime: Posix Time. (line 50) | -* gmtime: Posix Time. (line 36) | -* golden-section-search: Minimizing. (line 18) | -* gray-code->integer: Hilbert Space-Filling Curve. | - (line 65) | -* gray-code<=?: Hilbert Space-Filling Curve. | - (line 75) | -* gray-code<?: Hilbert Space-Filling Curve. | - (line 73) | -* gray-code>=?: Hilbert Space-Filling Curve. | - (line 76) | -* gray-code>?: Hilbert Space-Filling Curve. | - (line 74) | -* grey: Color Names. (line 13) | -* grid-horizontals: Legending. (line 58) | -* grid-verticals: Legending. (line 54) | -* gtime: Posix Time. (line 67) | -* has-duplicates?: Lists as sets. (line 187) | -* hash: Hashing. (line 14) | -* hash-associator: Hash Tables. (line 36) | -* hash-for-each: Hash Tables. (line 51) | -* hash-inquirer: Hash Tables. (line 31) | -* hash-map: Hash Tables. (line 46) | -* hash-rehasher: Hash Tables. (line 56) | -* hash-remover: Hash Tables. (line 41) | -* hashq: Hashing. (line 12) | -* hashv: Hashing. (line 13) | -* heap-extract-max!: Priority Queues. (line 23) | -* heap-insert!: Priority Queues. (line 19) | -* heap-length: Priority Queues. (line 16) | -* hilbert-coordinates->integer: Hilbert Space-Filling Curve. | - (line 45) | -* histograph: Character Plotting. (line 83) | -* home-vicinity: Vicinity. (line 51) | -* htm-fields: Parsing HTML. (line 58) | -* html-for-each: Parsing HTML. (line 10) | -* html:anchor: URI. (line 24) | -* html:atval: HTML. (line 9) | -* html:base: URI. (line 39) | -* html:body: HTML. (line 47) | -* html:buttons: HTML. (line 81) | -* html:caption: HTML Tables. (line 11) | -* html:checkbox: HTML. (line 69) | -* html:comment: HTML. (line 55) | -* html:delimited-list: HTML. (line 143) | -* html:editable-row-converter: HTML Tables. (line 117) | -* html:form: HTML. (line 61) | -* html:head: HTML. (line 39) | -* html:heading: HTML Tables. (line 15) | -* html:hidden: HTML. (line 66) | -* html:href-heading: HTML Tables. (line 18) | -* html:http-equiv: HTML. (line 24) | -* html:isindex: URI. (line 43) | -* html:link: URI. (line 32) | -* html:linked-row-converter: HTML Tables. (line 22) | -* html:meta: HTML. (line 17) | -* html:meta-refresh: HTML. (line 30) | -* html:plain: HTML. (line 13) | -* html:pre: HTML. (line 50) | -* html:read-title: Parsing HTML. (line 44) | -* html:select: HTML. (line 78) | -* html:table: HTML Tables. (line 9) | -* html:text: HTML. (line 72) | -* html:text-area: HTML. (line 75) | -* http:content: HTTP and CGI. (line 13) | -* http:error-page: HTTP and CGI. (line 20) | -* http:forwarding-page: HTTP and CGI. (line 26) | -* http:header: HTTP and CGI. (line 9) | -* http:serve-query: HTTP and CGI. (line 36) | -* identifier=?: Syntactic Closures. (line 369) | -* identifier?: Syntactic Closures. (line 334) | -* identity: Miscellany. (line 9) | + (line 10) +* glob-pattern?: URI. (line 110) +* gmktime: Posix Time. (line 50) +* gmtime: Posix Time. (line 36) +* golden-section-search: Minimizing. (line 18) +* gray-code->integer: Hilbert Space-Filling Curve. + (line 65) +* gray-code<=?: Hilbert Space-Filling Curve. + (line 75) +* gray-code<?: Hilbert Space-Filling Curve. + (line 73) +* gray-code>=?: Hilbert Space-Filling Curve. + (line 76) +* gray-code>?: Hilbert Space-Filling Curve. + (line 74) +* grey: Color Names. (line 13) +* grid-horizontals: Legending. (line 58) +* grid-verticals: Legending. (line 54) +* gtime: Posix Time. (line 67) +* has-duplicates?: Lists as sets. (line 187) +* hash: Hashing. (line 14) +* hash-associator: Hash Tables. (line 36) +* hash-for-each: Hash Tables. (line 51) +* hash-inquirer: Hash Tables. (line 31) +* hash-map: Hash Tables. (line 46) +* hash-rehasher: Hash Tables. (line 56) +* hash-remover: Hash Tables. (line 41) +* hashq: Hashing. (line 12) +* hashv: Hashing. (line 13) +* heap-extract-max!: Priority Queues. (line 23) +* heap-insert!: Priority Queues. (line 19) +* heap-length: Priority Queues. (line 16) +* hilbert-coordinates->integer: Hilbert Space-Filling Curve. + (line 45) +* histograph: Character Plotting. (line 83) +* home-vicinity: Vicinity. (line 51) +* htm-fields: Parsing HTML. (line 58) +* html-for-each: Parsing HTML. (line 10) +* html:anchor: URI. (line 24) +* html:atval: HTML. (line 9) +* html:base: URI. (line 39) +* html:body: HTML. (line 47) +* html:buttons: HTML. (line 81) +* html:caption: HTML Tables. (line 11) +* html:checkbox: HTML. (line 69) +* html:comment: HTML. (line 55) +* html:delimited-list: HTML. (line 143) +* html:editable-row-converter: HTML Tables. (line 117) +* html:form: HTML. (line 61) +* html:head: HTML. (line 39) +* html:heading: HTML Tables. (line 15) +* html:hidden: HTML. (line 66) +* html:href-heading: HTML Tables. (line 18) +* html:http-equiv: HTML. (line 24) +* html:isindex: URI. (line 43) +* html:link: URI. (line 32) +* html:linked-row-converter: HTML Tables. (line 22) +* html:meta: HTML. (line 17) +* html:meta-refresh: HTML. (line 30) +* html:plain: HTML. (line 13) +* html:pre: HTML. (line 50) +* html:read-title: Parsing HTML. (line 44) +* html:select: HTML. (line 78) +* html:table: HTML Tables. (line 9) +* html:text: HTML. (line 72) +* html:text-area: HTML. (line 75) +* http:content: HTTP and CGI. (line 13) +* http:error-page: HTTP and CGI. (line 20) +* http:forwarding-page: HTTP and CGI. (line 26) +* http:header: HTTP and CGI. (line 9) +* http:serve-query: HTTP and CGI. (line 36) +* identifier=?: Syntactic Closures. (line 369) +* identifier?: Syntactic Closures. (line 334) +* identity: Miscellany. (line 9) * ieee-byte-collate: Byte/Number Conversions. - (line 144) | + (line 151) | * ieee-byte-collate!: Byte/Number Conversions. - (line 135) | + (line 142) | * ieee-byte-decollate: Byte/Number Conversions. - (line 148) | + (line 155) | * ieee-byte-decollate!: Byte/Number Conversions. - (line 140) | + (line 147) | * ieee-double->bytes: Byte/Number Conversions. - (line 92) | + (line 97) | * ieee-float->bytes: Byte/Number Conversions. - (line 76) | -* illuminant-map: Spectra. (line 77) | -* illuminant-map->XYZ: Spectra. (line 82) | -* implementation-vicinity: Vicinity. (line 42) | -* in-graphic-context: Graphics Context. (line 7) | -* in-vicinity: Vicinity. (line 62) | -* init-debug: Breakpoints. (line 9) | + (line 79) | +* illuminant-map: Spectra. (line 77) +* illuminant-map->XYZ: Spectra. (line 82) +* implementation-vicinity: Vicinity. (line 42) +* in-graphic-context: Graphics Context. (line 7) +* in-vicinity: Vicinity. (line 62) +* init-debug: Breakpoints. (line 9) * integer->bytes: Byte/Number Conversions. - (line 29) | -* integer->gray-code: Hilbert Space-Filling Curve. | - (line 62) | -* integer->hilbert-coordinates: Hilbert Space-Filling Curve. | - (line 30) | -* integer->list: Bit-Twiddling. (line 215) | -* integer->peano-coordinates: Peano Space-Filling Curve. | - (line 7) | + (line 29) +* integer->gray-code: Hilbert Space-Filling Curve. + (line 62) +* integer->hilbert-coordinates: Hilbert Space-Filling Curve. + (line 30) +* integer->list: Bit-Twiddling. (line 215) +* integer->peano-coordinates: Peano Space-Filling Curve. + (line 19) | * integer-byte-collate: Byte/Number Conversions. - (line 129) | + (line 136) | * integer-byte-collate!: Byte/Number Conversions. - (line 123) | -* integer-length: Bit-Twiddling. (line 88) | -* integer-sqrt: Root Finding. (line 26) | -* interaction-environment: Eval. (line 51) | + (line 130) | +* integer-length: Bit-Twiddling. (line 88) +* integer-sqrt: Root Finding. (line 9) | +* interaction-environment: Eval. (line 51) +* interpolate-array-ref: Array Interpolation. (line 9) | * interpolate-from-table: Database Interpolation. - (line 13) | -* intersection: Lists as sets. (line 32) | -* iota: SRFI-1. (line 26) | + (line 13) +* intersection: Lists as sets. (line 32) +* iota: SRFI-1. (line 26) * isam-next on relational-table: Sequential Index Operations. - (line 18) | + (line 18) * isam-prev on relational-table: Sequential Index Operations. - (line 29) | -* jacobi-symbol: Prime Numbers. (line 20) | -* kill-process!: Multi-Processing. (line 24) | -* kill-table on base-table: Base Tables. (line 26) | -* L*a*b*->CIEXYZ: Color Conversions. (line 40) | -* l*a*b*->color: Color Spaces. (line 78) | -* L*a*b*->L*C*h: Color Conversions. (line 44) | + (line 29) +* jacobi-symbol: Prime Numbers. (line 20) +* kill-process!: Multi-Processing. (line 24) +* kill-table on base-table: Base Tables. (line 26) +* L*a*b*->CIEXYZ: Color Conversions. (line 40) +* l*a*b*->color: Color Spaces. (line 78) +* L*a*b*->L*C*h: Color Conversions. (line 44) * L*a*b*:DE*: Color Difference Metrics. - (line 17) | -* l*c*h->color: Color Spaces. (line 154) | -* L*C*h->L*a*b*: Color Conversions. (line 45) | + (line 17) +* l*c*h->color: Color Spaces. (line 154) +* L*C*h->L*a*b*: Color Conversions. (line 45) * L*C*h:DE*94: Color Difference Metrics. - (line 25) | -* L*u*v*->CIEXYZ: Color Conversions. (line 34) | -* l*u*v*->color: Color Spaces. (line 102) | -* laguerre:find-polynomial-root: Root Finding. (line 58) | -* laguerre:find-root: Root Finding. (line 47) | -* last <1>: SRFI-1. (line 83) | -* last: Lists as sequences. (line 111) | -* last-pair: Miscellany. (line 73) | -* length+: SRFI-1. (line 88) | -* library-vicinity: Vicinity. (line 39) | -* light:ambient: Solid Modeling. (line 110) | -* light:beam: Solid Modeling. (line 144) | -* light:directional: Solid Modeling. (line 122) | -* light:point: Solid Modeling. (line 158) | -* light:spot: Solid Modeling. (line 176) | -* list*: List construction. (line 18) | -* list->array: Arrays. (line 88) | -* list->bytes: Byte. (line 40) | -* list->integer: Bit-Twiddling. (line 221) | -* list-copy: SRFI-1. (line 24) | -* list-index: SRFI-1. (line 158) | -* list-of??: Lists as sets. (line 120) | -* list-table-definition: Using Databases. (line 167) | -* list-tabulate: SRFI-1. (line 18) | + (line 25) +* L*u*v*->CIEXYZ: Color Conversions. (line 34) +* l*u*v*->color: Color Spaces. (line 102) +* laguerre:find-polynomial-root: Root Finding. (line 58) +* laguerre:find-root: Root Finding. (line 47) +* last <1>: SRFI-1. (line 83) +* last: Lists as sequences. (line 111) +* last-pair: Miscellany. (line 73) +* length+: SRFI-1. (line 88) +* library-vicinity: Vicinity. (line 39) +* light:ambient: Solid Modeling. (line 110) +* light:beam: Solid Modeling. (line 144) +* light:directional: Solid Modeling. (line 122) +* light:point: Solid Modeling. (line 158) +* light:spot: Solid Modeling. (line 176) +* limit: The Limit. (line 7) | +* list*: List construction. (line 18) +* list->array: Arrays. (line 88) +* list->bytes: Byte. (line 40) +* list->integer: Bit-Twiddling. (line 221) +* list-copy: SRFI-1. (line 24) +* list-index: SRFI-1. (line 158) +* list-of??: Lists as sets. (line 120) +* list-table-definition: Using Databases. (line 167) +* list-tabulate: SRFI-1. (line 18) * list-tail: Rev4 Optional Procedures. - (line 12) | -* list=: SRFI-1. (line 48) | -* load->path: Module Manifests. (line 63) | -* load-ciexyz: Spectra. (line 37) | -* load-color-dictionary: Color Names. (line 52) | -* localtime: Posix Time. (line 39) | -* log2-binary-factors: Bit-Twiddling. (line 99) | -* logand: Bit-Twiddling. (line 18) | -* logbit?: Bit-Twiddling. (line 134) | -* logcount: Bit-Twiddling. (line 73) | -* logior: Bit-Twiddling. (line 27) | -* lognot: Bit-Twiddling. (line 45) | -* logtest: Bit-Twiddling. (line 63) | -* logxor: Bit-Twiddling. (line 36) | -* lset-adjoin: SRFI-1. (line 197) | -* lset-diff+intersection: SRFI-1. (line 207) | -* lset-diff+intersection!: SRFI-1. (line 222) | -* lset-difference: SRFI-1. (line 203) | -* lset-difference!: SRFI-1. (line 216) | -* lset-intersection: SRFI-1. (line 201) | -* lset-intersection!: SRFI-1. (line 214) | -* lset-union: SRFI-1. (line 199) | -* lset-union!: SRFI-1. (line 218) | -* lset-xor: SRFI-1. (line 205) | -* lset-xor!: SRFI-1. (line 220) | -* lset<=: SRFI-1. (line 191) | -* lset=: SRFI-1. (line 195) | -* macro:eval <1>: Syntax-Case Macros. (line 14) | -* macro:eval <2>: Syntactic Closures. (line 14) | -* macro:eval <3>: Macros That Work. (line 18) | -* macro:eval: R4RS Macros. (line 19) | -* macro:expand <1>: Syntax-Case Macros. (line 9) | -* macro:expand <2>: Syntactic Closures. (line 9) | -* macro:expand <3>: Macros That Work. (line 13) | -* macro:expand: R4RS Macros. (line 15) | -* macro:load <1>: Syntax-Case Macros. (line 20) | -* macro:load <2>: Syntactic Closures. (line 20) | -* macro:load <3>: Macros That Work. (line 24) | -* macro:load: R4RS Macros. (line 23) | -* macroexpand: Defmacro. (line 31) | -* macroexpand-1: Defmacro. (line 30) | -* macwork:eval: Macros That Work. (line 19) | -* macwork:expand: Macros That Work. (line 14) | -* macwork:load: Macros That Work. (line 25) | -* make-array: Arrays. (line 54) | -* make-base on base-table: The Base. (line 19) | -* make-bytes: Byte. (line 23) | -* make-color: Color Data-Type. (line 30) | -* make-command-server: Command Service. (line 7) | -* make-directory: Directories. (line 17) | -* make-dynamic: Dynamic Data Type. (line 9) | -* make-exchanger: Miscellany. (line 37) | -* make-generic-method: Object. (line 57) | -* make-generic-predicate: Object. (line 62) | + (line 12) +* list=: SRFI-1. (line 48) +* load->path: Module Manifests. (line 63) +* load-ciexyz: Spectra. (line 37) +* load-color-dictionary: Color Names. (line 52) +* localtime: Posix Time. (line 39) +* log2-binary-factors: Bit-Twiddling. (line 99) +* logand: Bit-Twiddling. (line 18) +* logbit?: Bit-Twiddling. (line 134) +* logcount: Bit-Twiddling. (line 73) +* logior: Bit-Twiddling. (line 27) +* lognot: Bit-Twiddling. (line 45) +* logtest: Bit-Twiddling. (line 63) +* logxor: Bit-Twiddling. (line 36) +* lset-adjoin: SRFI-1. (line 197) +* lset-diff+intersection: SRFI-1. (line 207) +* lset-diff+intersection!: SRFI-1. (line 222) +* lset-difference: SRFI-1. (line 203) +* lset-difference!: SRFI-1. (line 216) +* lset-intersection: SRFI-1. (line 201) +* lset-intersection!: SRFI-1. (line 214) +* lset-union: SRFI-1. (line 199) +* lset-union!: SRFI-1. (line 218) +* lset-xor: SRFI-1. (line 205) +* lset-xor!: SRFI-1. (line 220) +* lset<=: SRFI-1. (line 191) +* lset=: SRFI-1. (line 195) +* macro:eval <1>: Syntax-Case Macros. (line 14) +* macro:eval <2>: Syntactic Closures. (line 14) +* macro:eval <3>: Macros That Work. (line 18) +* macro:eval: R4RS Macros. (line 19) +* macro:expand <1>: Syntax-Case Macros. (line 9) +* macro:expand <2>: Syntactic Closures. (line 9) +* macro:expand <3>: Macros That Work. (line 13) +* macro:expand: R4RS Macros. (line 15) +* macro:load <1>: Syntax-Case Macros. (line 20) +* macro:load <2>: Syntactic Closures. (line 20) +* macro:load <3>: Macros That Work. (line 24) +* macro:load: R4RS Macros. (line 23) +* macroexpand: Defmacro. (line 31) +* macroexpand-1: Defmacro. (line 30) +* macwork:eval: Macros That Work. (line 19) +* macwork:expand: Macros That Work. (line 14) +* macwork:load: Macros That Work. (line 25) +* make-array: Arrays. (line 54) +* make-base on base-table: The Base. (line 19) +* make-bytes: Byte. (line 23) +* make-color: Color Data-Type. (line 30) +* make-command-server: Command Service. (line 7) +* make-directory: Directories. (line 17) +* make-dynamic: Dynamic Data Type. (line 9) +* make-exchanger: Miscellany. (line 37) +* make-generic-method: Object. (line 57) +* make-generic-predicate: Object. (line 62) * make-getter on base-table: Base Record Operations. - (line 14) | + (line 14) * make-getter-1 on base-table: Base Record Operations. - (line 23) | -* make-hash-table: Hash Tables. (line 17) | -* make-heap: Priority Queues. (line 12) | -* make-key->list on base-table: Composite Keys. (line 38) | -* make-key-extractor on base-table: Composite Keys. (line 31) | -* make-keyifier-1 on base-table: Composite Keys. (line 7) | -* make-list: List construction. (line 7) | -* make-list-keyifier on base-table: Composite Keys. (line 17) | -* make-method!: Object. (line 65) | + (line 23) +* make-hash-table: Hash Tables. (line 17) +* make-heap: Priority Queues. (line 12) +* make-key->list on base-table: Composite Keys. (line 38) +* make-key-extractor on base-table: Composite Keys. (line 31) +* make-keyifier-1 on base-table: Composite Keys. (line 7) +* make-list: List construction. (line 7) +* make-list-keyifier on base-table: Composite Keys. (line 17) +* make-method!: Object. (line 65) * make-nexter on base-table: Base ISAM Operations. - (line 17) | -* make-object: Object. (line 46) | -* make-parameter-list: Parameter lists. (line 23) | -* make-predicate!: Object. (line 72) | + (line 17) +* make-object: Object. (line 46) +* make-parameter-list: Parameter lists. (line 23) +* make-predicate!: Object. (line 72) * make-prever on base-table: Base ISAM Operations. - (line 25) | -* make-promise: Promises. (line 9) | + (line 25) +* make-promise: Promises. (line 9) * make-putter on base-table: Base Record Operations. - (line 31) | -* make-query-alist-command-server: HTTP and CGI. (line 86) | -* make-queue: Queues. (line 13) | + (line 31) +* make-query-alist-command-server: HTTP and CGI. (line 86) +* make-queue: Queues. (line 13) * make-random-state: Exact Random Numbers. - (line 44) | -* make-record-type: Records. (line 12) | + (line 44) +* make-record-type: Records. (line 12) * make-relational-system: Relational Database Objects. - (line 11) | -* make-ruleset: Commutative Rings. (line 82) | -* make-shared-array: Arrays. (line 69) | -* make-sierpinski-indexer: Sierpinski Curve. (line 9) | -* make-slib-color-name-db: Color Names. (line 94) | -* make-syntactic-closure: Syntactic Closures. (line 177) | -* make-table on base-table: Base Tables. (line 7) | -* make-uri: URI. (line 12) | -* make-vicinity: Vicinity. (line 21) | + (line 11) +* make-ruleset: Commutative Rings. (line 82) +* make-shared-array: Arrays. (line 69) +* make-sierpinski-indexer: Sierpinski Curve. (line 9) +* make-slib-color-name-db: Color Names. (line 94) +* make-syntactic-closure: Syntactic Closures. (line 177) +* make-table on base-table: Base Tables. (line 7) +* make-uri: URI. (line 12) +* make-vicinity: Vicinity. (line 21) * make-wt-tree: Construction of Weight-Balanced Trees. - (line 51) | + (line 51) * make-wt-tree-type: Construction of Weight-Balanced Trees. - (line 19) | -* map!: SRFI-1. (line 122) | -* map-elts: Collections. (line 40) | + (line 19) +* map!: SRFI-1. (line 122) +* map-elts: Collections. (line 40) * map-key on base-table: Aggregate Base Operations. - (line 22) | -* map-keys: Collections. (line 56) | -* matfile:load: MAT-File Format. (line 25) | -* matfile:read: MAT-File Format. (line 19) | -* matrix->array: Matrix Algebra. (line 15) | -* matrix->lists: Matrix Algebra. (line 12) | -* matrix:inverse: Matrix Algebra. (line 33) | -* matrix:product: Matrix Algebra. (line 30) | -* mdbm:report: Using Databases. (line 94) | -* member: SRFI-1. (line 160) | -* member-if: Lists as sets. (line 62) | -* merge: Sorting. (line 97) | -* merge!: Sorting. (line 106) | -* mktime: Posix Time. (line 54) | -* mod: Modular Arithmetic. (line 9) | -* modular:*: Modular Arithmetic. (line 77) | -* modular:+: Modular Arithmetic. (line 71) | -* modular:-: Modular Arithmetic. (line 74) | -* modular:expt: Modular Arithmetic. (line 83) | -* modular:invert: Modular Arithmetic. (line 64) | -* modular:invertable?: Modular Arithmetic. (line 60) | -* modular:negate: Modular Arithmetic. (line 68) | -* modular:normalize: Modular Arithmetic. (line 39) | -* modulus->integer: Modular Arithmetic. (line 35) | -* mrna<-cdna: NCBI-DNA. (line 15) | -* must-be-first: Batch. (line 128) | -* must-be-last: Batch. (line 133) | -* ncbi:read-dna-sequence: NCBI-DNA. (line 7) | -* ncbi:read-file: NCBI-DNA. (line 11) | + (line 22) +* map-keys: Collections. (line 56) +* matfile:load: MAT-File Format. (line 25) +* matfile:read: MAT-File Format. (line 19) +* matrix->array: Matrix Algebra. (line 15) +* matrix->lists: Matrix Algebra. (line 12) +* matrix:inverse: Matrix Algebra. (line 33) +* matrix:product: Matrix Algebra. (line 30) +* mdbm:report: Using Databases. (line 94) +* member: SRFI-1. (line 160) +* member-if: Lists as sets. (line 62) +* merge: Sorting. (line 97) +* merge!: Sorting. (line 106) +* mktime: Posix Time. (line 54) +* mod: Modular Arithmetic. (line 9) +* modular:*: Modular Arithmetic. (line 77) +* modular:+: Modular Arithmetic. (line 71) +* modular:-: Modular Arithmetic. (line 74) +* modular:expt: Modular Arithmetic. (line 83) +* modular:invert: Modular Arithmetic. (line 64) +* modular:invertable?: Modular Arithmetic. (line 60) +* modular:negate: Modular Arithmetic. (line 68) +* modular:normalize: Modular Arithmetic. (line 39) +* modulus->integer: Modular Arithmetic. (line 35) +* mrna<-cdna: NCBI-DNA. (line 15) +* must-be-first: Batch. (line 128) +* must-be-last: Batch. (line 133) +* natural->peano-coordinates: Peano Space-Filling Curve. | + (line 9) | +* ncbi:read-dna-sequence: NCBI-DNA. (line 7) +* ncbi:read-file: NCBI-DNA. (line 11) * nconc: Destructive list operations. - (line 10) | -* newton:find-integer-root: Root Finding. (line 9) | -* newton:find-root: Root Finding. (line 30) | -* ninth: SRFI-1. (line 65) | -* not-pair?: SRFI-1. (line 46) | -* notany: Lists as sets. (line 105) | -* notevery: Lists as sets. (line 109) | + (line 10) +* newton:find-integer-root: Root Finding. (line 13) | +* newton:find-root: Root Finding. (line 30) +* ninth: SRFI-1. (line 65) +* not-pair?: SRFI-1. (line 46) +* notany: Lists as sets. (line 105) +* notevery: Lists as sets. (line 109) * nreverse: Destructive list operations. - (line 38) | -* nthcdr: Lists as sequences. (line 137) | -* null-directory?: URI. (line 106) | -* null-environment: Eval. (line 29) | -* null-list?: SRFI-1. (line 44) | -* object: Yasos interface. (line 17) | -* object->limited-string: Object-To-String. (line 12) | -* object->string: Object-To-String. (line 9) | -* object-with-ancestors: Yasos interface. (line 23) | -* object?: Object. (line 54) | -* offset-time: Time and Date. (line 30) | -* open-base on base-table: The Base. (line 33) | -* open-command-database: Database Extension. (line 34) | -* open-command-database!: Database Extension. (line 43) | -* open-database: Using Databases. (line 71) | + (line 38) +* nthcdr: Lists as sequences. (line 137) +* null-directory?: URI. (line 106) +* null-environment: Eval. (line 29) +* null-list?: SRFI-1. (line 44) +* object: Yasos interface. (line 17) +* object->limited-string: Object-To-String. (line 12) +* object->string: Object-To-String. (line 9) +* object-with-ancestors: Yasos interface. (line 23) +* object?: Object. (line 54) +* offset-time: Time and Date. (line 30) +* open-base on base-table: The Base. (line 33) +* open-command-database: Database Extension. (line 34) +* open-command-database!: Database Extension. (line 43) +* open-database: Using Databases. (line 71) * open-database on relational-system: Relational Database Objects. - (line 45) | -* open-database!: Using Databases. (line 68) | -* open-file <1>: Byte. (line 57) | -* open-file: Input/Output. (line 18) | -* open-table: Using Databases. (line 107) | -* open-table on base-table: Base Tables. (line 16) | -* open-table on relational-database: Database Operations. (line 52) | -* open-table!: Using Databases. (line 114) | -* operate-as: Yasos interface. (line 31) | -* or?: Non-List functions. (line 19) | + (line 45) +* open-database!: Using Databases. (line 68) +* open-file <1>: Byte. (line 57) +* open-file: Input/Output. (line 18) +* open-table: Using Databases. (line 107) +* open-table on base-table: Base Tables. (line 16) +* open-table on relational-database: Database Operations. (line 52) +* open-table!: Using Databases. (line 114) +* operate-as: Yasos interface. (line 31) +* or?: Non-List functions. (line 19) * ordered-for-each-key on base-table: Base ISAM Operations. - (line 10) | -* os->batch-dialect: Batch. (line 138) | -* outline-rect: Rectangles. (line 33) | -* output-port-height: Input/Output. (line 87) | -* output-port-width: Input/Output. (line 81) | -* overcast-sky-color-xyy: Daylight. (line 74) | -* p<-cdna: NCBI-DNA. (line 27) | -* pad-range: Column Ranges. (line 13) | -* pair-fold: SRFI-1. (line 115) | -* pair-fold-right: SRFI-1. (line 117) | -* pair-for-each: SRFI-1. (line 124) | -* parameter-list->arglist: Parameter lists. (line 86) | -* parameter-list-expand: Parameter lists. (line 41) | -* parameter-list-ref: Parameter lists. (line 26) | -* parse-ftp-address: URI. (line 117) | -* partition: SRFI-1. (line 133) | -* partition!: SRFI-1. (line 137) | -* partition-page: Rectangles. (line 16) | -* path->uri: URI. (line 95) | -* pathname->vicinity: Vicinity. (line 25) | -* peano-coordinates->integer: Peano Space-Filling Curve. | - (line 13) | -* plot <1>: Legacy Plotting. (line 11) | -* plot: Character Plotting. (line 17) | -* plot-column: Drawing the Graph. (line 7) | + (line 10) +* os->batch-dialect: Batch. (line 138) +* outline-rect: Rectangles. (line 33) +* output-port-height: Input/Output. (line 87) +* output-port-width: Input/Output. (line 81) +* overcast-sky-color-xyy: Daylight. (line 74) +* p<-cdna: NCBI-DNA. (line 27) +* pad-range: Column Ranges. (line 13) +* pair-fold: SRFI-1. (line 115) +* pair-fold-right: SRFI-1. (line 117) +* pair-for-each: SRFI-1. (line 124) +* parameter-list->arglist: Parameter lists. (line 86) +* parameter-list-expand: Parameter lists. (line 41) +* parameter-list-ref: Parameter lists. (line 26) +* parse-ftp-address: URI. (line 117) +* partition: SRFI-1. (line 133) +* partition!: SRFI-1. (line 137) +* partition-page: Rectangles. (line 16) +* path->uri: URI. (line 95) +* pathname->vicinity: Vicinity. (line 25) +* peano-coordinates->integer: Peano Space-Filling Curve. + (line 25) | +* peano-coordinates->natural: Peano Space-Filling Curve. | + (line 15) | +* plot <1>: Legacy Plotting. (line 11) +* plot: Character Plotting. (line 17) +* plot-column: Drawing the Graph. (line 7) * pnm:array-write: Portable Image Files. - (line 44) | + (line 44) * pnm:image-file->array: Portable Image Files. - (line 35) | + (line 35) * pnm:type-dimensions: Portable Image Files. - (line 9) | -* port?: Input/Output. (line 44) | -* position: Lists as sequences. (line 7) | -* pprint-file: Pretty-Print. (line 63) | -* pprint-filter-file: Pretty-Print. (line 69) | + (line 9) +* port?: Input/Output. (line 44) +* position: Lists as sequences. (line 7) +* pprint-file: Pretty-Print. (line 63) +* pprint-filter-file: Pretty-Print. (line 69) * prec:commentfix: Grammar Rule Definition. - (line 111) | + (line 111) * prec:define-grammar: Ruleset Definition and Use. - (line 24) | + (line 24) * prec:delim: Grammar Rule Definition. - (line 24) | + (line 24) * prec:infix: Grammar Rule Definition. - (line 53) | + (line 53) * prec:inmatchfix: Grammar Rule Definition. - (line 151) | + (line 151) * prec:make-led: Nud and Led Definition. - (line 49) | + (line 49) * prec:make-nud: Nud and Led Definition. - (line 39) | + (line 39) * prec:matchfix: Grammar Rule Definition. - (line 131) | + (line 131) * prec:nary: Grammar Rule Definition. - (line 72) | + (line 72) * prec:nofix: Grammar Rule Definition. - (line 29) | + (line 29) * prec:parse: Ruleset Definition and Use. - (line 33) | + (line 33) * prec:postfix: Grammar Rule Definition. - (line 85) | + (line 85) * prec:prefix: Grammar Rule Definition. - (line 36) | + (line 36) * prec:prestfix: Grammar Rule Definition. - (line 94) | -* predicate->asso: Association Lists. (line 17) | -* predicate->hash: Hash Tables. (line 9) | -* predicate->hash-asso: Hash Tables. (line 25) | + (line 94) +* predicate->asso: Association Lists. (line 17) +* predicate->hash: Hash Tables. (line 9) +* predicate->hash-asso: Hash Tables. (line 25) * present? on base-table: Base Record Operations. - (line 10) | -* pretty-print: Pretty-Print. (line 9) | -* pretty-print->string: Pretty-Print. (line 23) | + (line 10) +* pretty-print: Pretty-Print. (line 9) +* pretty-print->string: Pretty-Print. (line 23) * primary-limit on relational-table: Table Administration. - (line 16) | -* prime?: Prime Numbers. (line 28) | -* primes<: Prime Numbers. (line 33) | -* primes>: Prime Numbers. (line 38) | -* print: Yasos interface. (line 36) | -* print-call-stack: Trace. (line 29) | + (line 16) +* prime?: Prime Numbers. (line 28) +* primes<: Prime Numbers. (line 33) +* primes>: Prime Numbers. (line 38) +* print: Yasos interface. (line 36) +* print-call-stack: Trace. (line 29) * printf: Standard Formatted Output. - (line 9) | -* process:schedule!: Multi-Processing. (line 20) | -* program-vicinity: Vicinity. (line 30) | -* project-table on relational-database: Database Operations. (line 76) | -* proper-list?: SRFI-1. (line 38) | -* protein<-cdna: NCBI-DNA. (line 23) | -* provide: Feature. (line 58) | -* provided?: Feature. (line 30) | -* qp: Quick Print. (line 19) | -* qpn: Quick Print. (line 20) | -* qpr: Quick Print. (line 21) | -* queue-empty?: Queues. (line 19) | -* queue-front: Queues. (line 39) | -* queue-pop!: Queues. (line 29) | -* queue-push!: Queues. (line 22) | -* queue-rear: Queues. (line 42) | -* queue?: Queues. (line 16) | + (line 9) +* process:schedule!: Multi-Processing. (line 20) +* program-vicinity: Vicinity. (line 30) +* project-table on relational-database: Database Operations. (line 76) +* proper-list?: SRFI-1. (line 38) +* protein<-cdna: NCBI-DNA. (line 23) +* provide: Feature. (line 58) +* provided?: Feature. (line 30) +* qp: Quick Print. (line 19) +* qpn: Quick Print. (line 20) +* qpr: Quick Print. (line 21) +* queue-empty?: Queues. (line 19) +* queue-front: Queues. (line 39) +* queue-pop!: Queues. (line 29) +* queue-push!: Queues. (line 22) +* queue-rear: Queues. (line 42) +* queue?: Queues. (line 16) * random: Exact Random Numbers. - (line 9) | + (line 9) * random:exp: Inexact Random Numbers. - (line 14) | + (line 14) * random:hollow-sphere!: Inexact Random Numbers. - (line 32) | + (line 32) * random:normal: Inexact Random Numbers. - (line 20) | + (line 20) * random:normal-vector!: Inexact Random Numbers. - (line 26) | + (line 26) * random:solid-sphere!: Inexact Random Numbers. - (line 39) | + (line 39) * random:uniform: Inexact Random Numbers. + (line 9) +* rationalize: Rationalize. (line 9) +* read-byte: Byte. (line 69) +* read-bytes: Byte. (line 87) +* read-cie-illuminant: Spectra. (line 43) +* read-command: Command Line. (line 9) +* read-line: Line I/O. (line 9) +* read-line!: Line I/O. (line 18) +* read-normalized-illuminant: Spectra. (line 54) +* read-options-file: Command Line. (line 65) +* receive: Binding to multiple values. | (line 9) | -* rationalize: Rationalize. (line 9) | -* read-byte: Byte. (line 69) | -* read-bytes: Byte. (line 87) | -* read-cie-illuminant: Spectra. (line 43) | -* read-command: Command Line. (line 9) | -* read-line: Line I/O. (line 9) | -* read-line!: Line I/O. (line 18) | -* read-normalized-illuminant: Spectra. (line 54) | -* read-options-file: Command Line. (line 65) | -* receive: SRFI-8. (line 9) | -* record-accessor: Records. (line 41) | -* record-constructor: Records. (line 22) | -* record-modifier: Records. (line 50) | -* record-predicate: Records. (line 35) | -* reduce <1>: SRFI-1. (line 119) | -* reduce <2>: Lists as sequences. (line 19) | -* reduce: Collections. (line 71) | -* reduce-init: Lists as sequences. (line 61) | -* reduce-right: SRFI-1. (line 120) | -* rem: Modular Arithmetic. (line 10) | -* remove <1>: SRFI-1. (line 135) | -* remove: Lists as sets. (line 153) | -* remove!: SRFI-1. (line 139) | -* remove-duplicates: Lists as sets. (line 199) | -* remove-if: Lists as sets. (line 166) | -* remove-if-not: Lists as sets. (line 177) | -* remove-parameter: Parameter lists. (line 31) | -* remove-setter-for: Setters. (line 49) | -* repl:quit: Repl. (line 17) | -* repl:top-level: Repl. (line 11) | -* replace-suffix: Filenames. (line 65) | -* require <1>: Catalog Creation. (line 48) | -* require: Require. (line 25) | -* require-if: Require. (line 40) | -* resene: Color Names. (line 129) | -* restrict-table on relational-database: Database Operations. (line 77) | -* reverse!: SRFI-1. (line 93) | -* reverse-bit-field: Bit-Twiddling. (line 206) | -* RGB709->CIEXYZ: Color Conversions. (line 30) | -* rgb709->color: Color Spaces. (line 46) | -* rotate-bit-field: Bit-Twiddling. (line 192) | +* record-accessor: Records. (line 41) +* record-constructor: Records. (line 22) +* record-modifier: Records. (line 50) +* record-predicate: Records. (line 35) +* reduce <1>: SRFI-1. (line 119) +* reduce <2>: Lists as sequences. (line 19) +* reduce: Collections. (line 71) +* reduce-init: Lists as sequences. (line 61) +* reduce-right: SRFI-1. (line 120) +* rem: Modular Arithmetic. (line 10) +* remove <1>: SRFI-1. (line 135) +* remove: Lists as sets. (line 153) +* remove!: SRFI-1. (line 139) +* remove-duplicates: Lists as sets. (line 199) +* remove-if: Lists as sets. (line 166) +* remove-if-not: Lists as sets. (line 177) +* remove-parameter: Parameter lists. (line 31) +* remove-setter-for: Setters. (line 49) +* repl:quit: Repl. (line 17) +* repl:top-level: Repl. (line 11) +* replace-suffix: Filenames. (line 65) +* require <1>: Catalog Creation. (line 48) +* require: Require. (line 25) +* require-if: Require. (line 40) +* resample-array!: Array Interpolation. (line 19) | +* resene: Color Names. (line 129) +* restrict-table on relational-database: Database Operations. (line 77) +* reverse!: SRFI-1. (line 93) +* reverse-bit-field: Bit-Twiddling. (line 206) +* RGB709->CIEXYZ: Color Conversions. (line 30) +* rgb709->color: Color Spaces. (line 46) +* rotate-bit-field: Bit-Twiddling. (line 192) * row:delete on relational-table: Single Row Operations. - (line 50) | + (line 50) * row:delete* on relational-table: Multi-Row Operations. - (line 26) | + (line 26) * row:insert on relational-table: Single Row Operations. - (line 12) | + (line 12) * row:insert* on relational-table: Multi-Row Operations. - (line 41) | + (line 41) * row:remove on relational-table: Single Row Operations. - (line 45) | + (line 45) * row:remove* on relational-table: Multi-Row Operations. - (line 21) | + (line 21) * row:retrieve on relational-table: Single Row Operations. - (line 37) | + (line 37) * row:retrieve* on relational-table: Multi-Row Operations. - (line 7) | + (line 7) * row:update on relational-table: Single Row Operations. - (line 31) | + (line 31) * row:update* on relational-table: Multi-Row Operations. - (line 47) | -* rule-horizontal: Legending. (line 40) | -* rule-vertical: Legending. (line 32) | -* saturate: Color Names. (line 109) | + (line 47) +* rule-horizontal: Legending. (line 40) +* rule-vertical: Legending. (line 32) +* saturate: Color Names. (line 109) * scanf: Standard Formatted Input. - (line 13) | + (line 13) * scanf-read-list: Standard Formatted Input. - (line 9) | -* scene:overcast: Solid Modeling. (line 67) | -* scene:panorama: Solid Modeling. (line 33) | -* scene:sky-and-dirt: Solid Modeling. (line 50) | -* scene:sky-and-grass: Solid Modeling. (line 53) | -* scene:sphere: Solid Modeling. (line 37) | -* scene:sun: Solid Modeling. (line 56) | -* scene:viewpoint: Solid Modeling. (line 81) | -* scene:viewpoints: Solid Modeling. (line 88) | -* scheme-report-environment: Eval. (line 28) | -* schmooz: Schmooz. (line 16) | -* secant:find-bracketed-root: Root Finding. (line 71) | -* secant:find-root: Root Finding. (line 70) | -* second: SRFI-1. (line 55) | + (line 9) +* scene:overcast: Solid Modeling. (line 67) +* scene:panorama: Solid Modeling. (line 33) +* scene:sky-and-dirt: Solid Modeling. (line 50) +* scene:sky-and-grass: Solid Modeling. (line 53) +* scene:sphere: Solid Modeling. (line 37) +* scene:sun: Solid Modeling. (line 56) +* scene:viewpoint: Solid Modeling. (line 81) +* scene:viewpoints: Solid Modeling. (line 88) +* scheme-report-environment: Eval. (line 28) +* schmooz: Schmooz. (line 16) +* secant:find-bracketed-root: Root Finding. (line 71) +* secant:find-root: Root Finding. (line 70) +* second: SRFI-1. (line 55) * seed->random-state: Exact Random Numbers. - (line 35) | -* set: Setters. (line 30) | -* set-color: Graphics Context. (line 11) | -* set-difference: Lists as sets. (line 42) | -* set-font: Graphics Context. (line 18) | -* set-glyphsize: Graphics Context. (line 48) | -* set-linedash: Graphics Context. (line 39) | -* set-linewidth: Graphics Context. (line 34) | -* set-margin-templates: Legending. (line 27) | -* Setter: Collections. (line 107) | -* setter: Setters. (line 22) | -* setup-plot: Column Ranges. (line 22) | -* seventh: SRFI-1. (line 63) | -* si:conversion-factor: Metric Units. (line 160) | + (line 35) +* set: Setters. (line 30) +* set-color: Graphics Context. (line 11) +* set-difference: Lists as sets. (line 42) +* set-font: Graphics Context. (line 18) +* set-glyphsize: Graphics Context. (line 48) +* set-linedash: Graphics Context. (line 39) +* set-linewidth: Graphics Context. (line 34) +* set-margin-templates: Legending. (line 27) +* Setter: Collections. (line 107) +* setter: Setters. (line 22) +* setup-plot: Column Ranges. (line 22) +* seventh: SRFI-1. (line 63) +* si:conversion-factor: Metric Units. (line 160) * singleton-wt-tree: Construction of Weight-Balanced Trees. - (line 58) | -* sixth: SRFI-1. (line 62) | -* size <1>: Collections. (line 104) | -* size: Yasos interface. (line 41) | -* sky-color-xyy: Daylight. (line 85) | -* slib:error: System. (line 45) | -* slib:eval: System. (line 30) | -* slib:eval-load: System. (line 35) | -* slib:exit: System. (line 51) | -* slib:in-catalog?: Require. (line 57) | -* slib:load: System. (line 20) | -* slib:load-compiled: System. (line 15) | -* slib:load-source: System. (line 9) | -* slib:report: Configuration. (line 43) | -* slib:report-version: Configuration. (line 36) | -* slib:warn: System. (line 42) | -* snap-range: Column Ranges. (line 16) | -* software-type: Configuration. (line 32) | -* solar-declination: Daylight. (line 21) | -* solar-hour: Daylight. (line 14) | -* solar-polar: Daylight. (line 23) | -* solid:arrow: Solid Modeling. (line 399) | -* solid:basrelief: Solid Modeling. (line 271) | -* solid:box: Solid Modeling. (line 206) | -* solid:center-array-of: Solid Modeling. (line 390) | -* solid:center-pile-of: Solid Modeling. (line 395) | -* solid:center-row-of: Solid Modeling. (line 386) | -* solid:color: Solid Modeling. (line 313) | -* solid:cone: Solid Modeling. (line 230) | -* solid:cylinder: Solid Modeling. (line 215) | -* solid:disk: Solid Modeling. (line 223) | -* solid:ellipsoid: Solid Modeling. (line 248) | -* solid:font: Solid Modeling. (line 351) | -* solid:polyline: Solid Modeling. (line 257) | -* solid:pyramid: Solid Modeling. (line 236) | -* solid:rotation: Solid Modeling. (line 418) | -* solid:scale: Solid Modeling. (line 414) | -* solid:sphere: Solid Modeling. (line 242) | -* solid:text: Solid Modeling. (line 294) | -* solid:texture: Solid Modeling. (line 330) | -* solid:translation: Solid Modeling. (line 409) | -* solidify-database: Using Databases. (line 86) | + (line 58) +* sixth: SRFI-1. (line 62) +* size <1>: Collections. (line 104) +* size: Yasos interface. (line 41) +* sky-color-xyy: Daylight. (line 85) +* slib:error: System. (line 45) +* slib:eval: System. (line 30) +* slib:eval-load: System. (line 35) +* slib:exit: System. (line 51) +* slib:in-catalog?: Require. (line 57) +* slib:load: System. (line 20) +* slib:load-compiled: System. (line 15) +* slib:load-source: System. (line 9) +* slib:report: Configuration. (line 43) +* slib:report-version: Configuration. (line 36) +* slib:warn: System. (line 42) +* snap-range: Column Ranges. (line 16) +* software-type: Configuration. (line 32) +* solar-declination: Daylight. (line 21) +* solar-hour: Daylight. (line 14) +* solar-polar: Daylight. (line 23) +* solid:arrow: Solid Modeling. (line 399) +* solid:basrelief: Solid Modeling. (line 271) +* solid:box: Solid Modeling. (line 206) +* solid:center-array-of: Solid Modeling. (line 390) +* solid:center-pile-of: Solid Modeling. (line 395) +* solid:center-row-of: Solid Modeling. (line 386) +* solid:color: Solid Modeling. (line 313) +* solid:cone: Solid Modeling. (line 230) +* solid:cylinder: Solid Modeling. (line 215) +* solid:disk: Solid Modeling. (line 223) +* solid:ellipsoid: Solid Modeling. (line 248) +* solid:font: Solid Modeling. (line 351) +* solid:polyline: Solid Modeling. (line 257) +* solid:pyramid: Solid Modeling. (line 236) +* solid:rotation: Solid Modeling. (line 418) +* solid:scale: Solid Modeling. (line 414) +* solid:sphere: Solid Modeling. (line 242) +* solid:text: Solid Modeling. (line 294) +* solid:texture: Solid Modeling. (line 330) +* solid:translation: Solid Modeling. (line 409) +* solidify-database: Using Databases. (line 86) * solidify-database on relational-database: Database Operations. - (line 42) | -* some: Lists as sets. (line 73) | -* sort: Sorting. (line 119) | -* sort!: Sorting. (line 126) | -* sorted?: Sorting. (line 88) | -* soundex: Soundex. (line 9) | -* span: SRFI-1. (line 148) | -* span!: SRFI-1. (line 150) | -* spectrum->chromaticity: Spectra. (line 111) | -* spectrum->XYZ: Spectra. (line 85) | -* split-at: SRFI-1. (line 80) | -* split-at!: SRFI-1. (line 81) | + (line 42) +* some: Lists as sets. (line 73) +* sort: Sorting. (line 119) +* sort!: Sorting. (line 126) +* sorted?: Sorting. (line 88) +* soundex: Soundex. (line 9) +* span: SRFI-1. (line 148) +* span!: SRFI-1. (line 150) +* spectrum->chromaticity: Spectra. (line 111) +* spectrum->XYZ: Spectra. (line 85) +* split-at: SRFI-1. (line 80) +* split-at!: SRFI-1. (line 81) * sprintf: Standard Formatted Output. - (line 11) | -* sRGB->CIEXYZ: Color Conversions. (line 48) | -* srgb->color: Color Spaces. (line 195) | -* sRGB->e-sRGB: Color Conversions. (line 59) | -* sRGB->xRGB: Color Conversions. (line 53) | + (line 11) +* sRGB->CIEXYZ: Color Conversions. (line 48) +* srgb->color: Color Spaces. (line 195) +* sRGB->e-sRGB: Color Conversions. (line 59) +* sRGB->xRGB: Color Conversions. (line 53) * sscanf: Standard Formatted Input. - (line 15) | -* stack: Trace. (line 49) | -* stack-all: Debug. (line 27) | -* stackf: Trace. (line 85) | -* string->color: Color Data-Type. (line 98) | -* string-capitalize: String-Case. (line 11) | -* string-capitalize!: String-Case. (line 16) | -* string-ci->symbol: String-Case. (line 19) | + (line 15) +* stack: Trace. (line 49) +* stack-all: Debug. (line 27) +* stackf: Trace. (line 85) +* string->color: Color Data-Type. (line 98) +* string-capitalize: String-Case. (line 11) +* string-capitalize!: String-Case. (line 16) +* string-ci->symbol: String-Case. (line 19) * string-copy: Rev4 Optional Procedures. - (line 14) | -* string-downcase: String-Case. (line 10) | -* string-downcase!: String-Case. (line 15) | + (line 14) +* string-downcase: String-Case. (line 10) +* string-downcase!: String-Case. (line 15) * string-fill!: Rev4 Optional Procedures. - (line 16) | -* string-index: String Search. (line 9) | -* string-index-ci: String Search. (line 10) | -* string-join: Batch. (line 123) | -* string-null?: Rev2 Procedures. (line 33) | -* string-reverse-index: String Search. (line 14) | -* string-reverse-index-ci: String Search. (line 15) | -* string-subst: String Search. (line 56) | -* string-upcase: String-Case. (line 9) | -* string-upcase!: String-Case. (line 14) | -* StudlyCapsExpand: String-Case. (line 29) | -* sub-vicinity: Vicinity. (line 73) | -* subarray: Subarrays. (line 9) | -* subset?: Lists as sets. (line 52) | -* subst: Tree Operations. (line 11) | -* substq: Tree Operations. (line 12) | -* substring-ci?: String Search. (line 20) | -* substring-fill!: Rev2 Procedures. (line 30) | -* substring-move-left!: Rev2 Procedures. (line 13) | -* substring-move-right!: Rev2 Procedures. (line 14) | -* substring-read!: Byte. (line 112) | -* substring-write: Byte. (line 121) | -* substring?: String Search. (line 19) | -* substv: Tree Operations. (line 13) | -* sunlight-chromaticity: Daylight. (line 65) | -* sunlight-spectrum: Daylight. (line 61) | -* supported-key-type? on base-table: Base Field Types. (line 13) | -* supported-type? on base-table: Base Field Types. (line 7) | -* symbol-append: String-Case. (line 23) | -* symmetric:modulus: Modular Arithmetic. (line 32) | -* sync-base on base-table: The Base. (line 53) | -* sync-database: Using Databases. (line 82) | -* sync-database on relational-database: Database Operations. (line 37) | -* syncase:eval: Syntax-Case Macros. (line 15) | -* syncase:expand: Syntax-Case Macros. (line 10) | -* syncase:load: Syntax-Case Macros. (line 21) | -* syncase:sanity-check: Syntax-Case Macros. (line 67) | -* synclo:eval: Syntactic Closures. (line 15) | -* synclo:expand: Syntactic Closures. (line 10) | -* synclo:load: Syntactic Closures. (line 21) | -* syntax-rules: Macro by Example. (line 56) | -* system: System Interface. (line 16) | -* system->line: Line I/O. (line 35) | -* table->linked-html: HTML Tables. (line 34) | -* table->linked-page: HTML Tables. (line 42) | -* table-exists? on relational-database: Database Operations. (line 48) | -* table-name->filename: HTML Tables. (line 31) | -* take: SRFI-1. (line 71) | -* take!: SRFI-1. (line 72) | -* take-right: SRFI-1. (line 74) | -* temperature->chromaticity: Spectra. (line 150) | -* temperature->XYZ: Spectra. (line 135) | -* tenth: SRFI-1. (line 66) | -* third: SRFI-1. (line 57) | -* time-zone: Time Zone. (line 68) | -* time:gmtime: Time Infrastructure. (line 9) | -* time:invert: Time Infrastructure. (line 10) | -* time:split: Time Infrastructure. (line 11) | -* title-bottom: Legending. (line 12) | -* title-top: Legending. (line 7) | -* tmpnam: Input/Output. (line 65) | -* tok:bump-column: Token definition. (line 61) | -* tok:char-group: Token definition. (line 7) | + (line 16) +* string-index: String Search. (line 9) +* string-index-ci: String Search. (line 10) +* string-join: Batch. (line 123) +* string-null?: Rev2 Procedures. (line 33) +* string-reverse-index: String Search. (line 14) +* string-reverse-index-ci: String Search. (line 15) +* string-subst: String Search. (line 56) +* string-upcase: String-Case. (line 9) +* string-upcase!: String-Case. (line 14) +* StudlyCapsExpand: String-Case. (line 29) +* sub-vicinity: Vicinity. (line 73) +* subarray: Subarrays. (line 9) +* subset?: Lists as sets. (line 52) +* subst: Tree Operations. (line 11) +* substq: Tree Operations. (line 12) +* substring-ci?: String Search. (line 20) +* substring-fill!: Rev2 Procedures. (line 30) +* substring-move-left!: Rev2 Procedures. (line 13) +* substring-move-right!: Rev2 Procedures. (line 14) +* substring-read!: Byte. (line 112) +* substring-write: Byte. (line 121) +* substring?: String Search. (line 19) +* substv: Tree Operations. (line 13) +* sunlight-chromaticity: Daylight. (line 65) +* sunlight-spectrum: Daylight. (line 61) +* supported-key-type? on base-table: Base Field Types. (line 13) +* supported-type? on base-table: Base Field Types. (line 7) +* symbol-append: String-Case. (line 23) +* symmetric:modulus: Modular Arithmetic. (line 32) +* sync-base on base-table: The Base. (line 53) +* sync-database: Using Databases. (line 82) +* sync-database on relational-database: Database Operations. (line 37) +* syncase:eval: Syntax-Case Macros. (line 15) +* syncase:expand: Syntax-Case Macros. (line 10) +* syncase:load: Syntax-Case Macros. (line 21) +* syncase:sanity-check: Syntax-Case Macros. (line 67) +* synclo:eval: Syntactic Closures. (line 15) +* synclo:expand: Syntactic Closures. (line 10) +* synclo:load: Syntactic Closures. (line 21) +* syntax-rules: Macro by Example. (line 56) +* system: System Interface. (line 16) +* system->line: Line I/O. (line 35) +* table->linked-html: HTML Tables. (line 34) +* table->linked-page: HTML Tables. (line 42) +* table-exists? on relational-database: Database Operations. (line 48) +* table-name->filename: HTML Tables. (line 31) +* take: SRFI-1. (line 71) +* take!: SRFI-1. (line 72) +* take-right: SRFI-1. (line 74) +* temperature->chromaticity: Spectra. (line 150) +* temperature->XYZ: Spectra. (line 135) +* tenth: SRFI-1. (line 66) +* third: SRFI-1. (line 57) +* time-zone: Time Zone. (line 68) +* time:gmtime: Time Infrastructure. (line 9) +* time:invert: Time Infrastructure. (line 10) +* time:split: Time Infrastructure. (line 11) +* title-bottom: Legending. (line 12) +* title-top: Legending. (line 7) +* tmpnam: Input/Output. (line 65) +* tok:bump-column: Token definition. (line 61) +* tok:char-group: Token definition. (line 7) * top-refs: Top-level Variable References. - (line 15) | + (line 15) * top-refs<-file: Top-level Variable References. - (line 19) | -* topological-sort: Topological Sort. (line 13) | -* trace: Trace. (line 33) | -* trace-all: Debug. (line 19) | -* tracef: Trace. (line 81) | -* track: Trace. (line 41) | -* track-all: Debug. (line 23) | -* trackf: Trace. (line 83) | -* transact-file-replacement: Transactions. (line 98) | -* transcript-off: Transcripts. (line 10) | -* transcript-on: Transcripts. (line 9) | -* transformer: Syntactic Closures. (line 113) | -* transpose: Matrix Algebra. (line 26) | -* truncate-up-to: Batch. (line 113) | -* tsort: Topological Sort. (line 12) | -* type-of: Type Coercion. (line 9) | -* tz:params: Time Zone. (line 73) | -* tz:std-offset: Time Zone. (line 89) | -* tzfile:read: Time Infrastructure. (line 15) | -* tzset: Time Zone. (line 97) | -* unbreak: Breakpoints. (line 37) | -* unbreakf: Breakpoints. (line 58) | -* union: Lists as sets. (line 21) | -* unmake-method!: Object. (line 75) | -* unstack: Trace. (line 71) | -* untrace: Trace. (line 57) | -* untracef: Trace. (line 96) | -* untrack: Trace. (line 64) | -* unzip1: SRFI-1. (line 100) | -* unzip2: SRFI-1. (line 101) | -* unzip3: SRFI-1. (line 102) | -* unzip4: SRFI-1. (line 103) | -* unzip5: SRFI-1. (line 104) | -* uri->tree: URI. (line 47) | -* uri:decode-query: URI. (line 71) | -* uri:make-path: URI. (line 21) | -* uri:path->keys: URI. (line 87) | -* uri:split-fields: URI. (line 67) | -* uric:decode: URI. (line 81) | -* uric:encode: URI. (line 76) | -* url->color-dictionary: Color Names. (line 77) | -* user-email-address: Transactions. (line 133) | -* user-vicinity: Vicinity. (line 47) | -* values: Values. (line 9) | -* vector->array: Arrays. (line 111) | + (line 19) +* topological-sort: Topological Sort. (line 13) +* trace: Trace. (line 33) +* trace-all: Debug. (line 19) +* tracef: Trace. (line 81) +* track: Trace. (line 41) +* track-all: Debug. (line 23) +* trackf: Trace. (line 83) +* transact-file-replacement: Transactions. (line 98) +* transcript-off: Transcripts. (line 10) +* transcript-on: Transcripts. (line 9) +* transformer: Syntactic Closures. (line 113) +* transpose: Matrix Algebra. (line 26) +* truncate-up-to: Batch. (line 113) +* tsort: Topological Sort. (line 12) +* type-of: Type Coercion. (line 9) +* tz:params: Time Zone. (line 73) +* tz:std-offset: Time Zone. (line 89) +* tzfile:read: Time Infrastructure. (line 15) +* tzset: Time Zone. (line 97) +* unbreak: Breakpoints. (line 37) +* unbreakf: Breakpoints. (line 58) +* union: Lists as sets. (line 21) +* unmake-method!: Object. (line 75) +* unstack: Trace. (line 71) +* untrace: Trace. (line 57) +* untracef: Trace. (line 96) +* untrack: Trace. (line 64) +* unzip1: SRFI-1. (line 100) +* unzip2: SRFI-1. (line 101) +* unzip3: SRFI-1. (line 102) +* unzip4: SRFI-1. (line 103) +* unzip5: SRFI-1. (line 104) +* uri->tree: URI. (line 47) +* uri:decode-query: URI. (line 71) +* uri:make-path: URI. (line 21) +* uri:path->keys: URI. (line 87) +* uri:split-fields: URI. (line 67) +* uric:decode: URI. (line 81) +* uric:encode: URI. (line 76) +* url->color-dictionary: Color Names. (line 77) +* user-email-address: Transactions. (line 133) +* user-vicinity: Vicinity. (line 47) +* values: Values. (line 9) +* vector->array: Arrays. (line 111) * vector-fill!: Rev4 Optional Procedures. - (line 18) | -* vet-slib: Module Analysis. (line 9) | -* vicinity:suffix?: Vicinity. (line 58) | -* vrml: Solid Modeling. (line 12) | -* vrml-append: Solid Modeling. (line 16) | -* vrml-to-file: Solid Modeling. (line 20) | -* wavelength->chromaticity: Spectra. (line 120) | -* wavelength->XYZ: Spectra. (line 115) | -* whole-page <1>: Rectangles. (line 11) | -* whole-page: PostScript Graphing. (line 37) | -* with-input-from-file: With-File. (line 9) | -* with-load-pathname: Vicinity. (line 79) | -* with-output-to-file: With-File. (line 10) | -* within-database: Within-database. (line 7) | -* world:info: Solid Modeling. (line 24) | -* wrap-command-interface: Database Extension. (line 7) | -* write-base on base-table: The Base. (line 43) | -* write-byte: Byte. (line 62) | -* write-bytes: Byte. (line 98) | -* write-database: Using Databases. (line 79) | -* write-database on relational-database: Database Operations. (line 26) | -* write-line: Line I/O. (line 29) | + (line 18) +* vet-slib: Module Analysis. (line 9) +* vicinity:suffix?: Vicinity. (line 58) +* vrml: Solid Modeling. (line 12) +* vrml-append: Solid Modeling. (line 16) +* vrml-to-file: Solid Modeling. (line 20) +* wavelength->chromaticity: Spectra. (line 120) +* wavelength->XYZ: Spectra. (line 115) +* whole-page <1>: Rectangles. (line 11) +* whole-page: PostScript Graphing. (line 37) +* with-input-from-file: With-File. (line 9) +* with-load-pathname: Vicinity. (line 79) +* with-output-to-file: With-File. (line 10) +* within-database: Within-database. (line 7) +* world:info: Solid Modeling. (line 24) +* wrap-command-interface: Database Extension. (line 7) +* write-base on base-table: The Base. (line 43) +* write-byte: Byte. (line 62) +* write-bytes: Byte. (line 98) +* write-database: Using Databases. (line 79) +* write-database on relational-database: Database Operations. (line 26) +* write-line: Line I/O. (line 29) * wt-tree/add: Basic Operations on Weight-Balanced Trees. - (line 20) | + (line 20) * wt-tree/add!: Basic Operations on Weight-Balanced Trees. - (line 28) | + (line 28) * wt-tree/delete: Basic Operations on Weight-Balanced Trees. - (line 48) | + (line 48) * wt-tree/delete!: Basic Operations on Weight-Balanced Trees. - (line 55) | + (line 55) * wt-tree/delete-min: Indexing Operations on Weight-Balanced Trees. - (line 60) | + (line 60) * wt-tree/delete-min!: Indexing Operations on Weight-Balanced Trees. - (line 70) | + (line 70) * wt-tree/difference: Advanced Operations on Weight-Balanced Trees. - (line 49) | + (line 49) * wt-tree/empty?: Basic Operations on Weight-Balanced Trees. - (line 12) | + (line 12) * wt-tree/fold: Advanced Operations on Weight-Balanced Trees. - (line 91) | + (line 91) * wt-tree/for-each: Advanced Operations on Weight-Balanced Trees. - (line 112) | + (line 112) * wt-tree/index: Indexing Operations on Weight-Balanced Trees. - (line 12) | + (line 12) * wt-tree/index-datum: Indexing Operations on Weight-Balanced Trees. - (line 13) | + (line 13) * wt-tree/index-pair: Indexing Operations on Weight-Balanced Trees. - (line 14) | + (line 14) * wt-tree/intersection: Advanced Operations on Weight-Balanced Trees. - (line 38) | + (line 38) * wt-tree/lookup: Basic Operations on Weight-Balanced Trees. - (line 41) | + (line 41) * wt-tree/member?: Basic Operations on Weight-Balanced Trees. - (line 35) | + (line 35) * wt-tree/min: Indexing Operations on Weight-Balanced Trees. - (line 43) | + (line 43) * wt-tree/min-datum: Indexing Operations on Weight-Balanced Trees. - (line 44) | + (line 44) * wt-tree/min-pair: Indexing Operations on Weight-Balanced Trees. - (line 45) | + (line 45) * wt-tree/rank: Indexing Operations on Weight-Balanced Trees. - (line 35) | + (line 35) * wt-tree/set-equal?: Advanced Operations on Weight-Balanced Trees. - (line 74) | + (line 74) * wt-tree/size: Basic Operations on Weight-Balanced Trees. - (line 16) | + (line 16) * wt-tree/split<: Advanced Operations on Weight-Balanced Trees. - (line 11) | + (line 11) * wt-tree/split>: Advanced Operations on Weight-Balanced Trees. - (line 18) | + (line 18) * wt-tree/subset?: Advanced Operations on Weight-Balanced Trees. - (line 59) | + (line 59) * wt-tree/union: Advanced Operations on Weight-Balanced Trees. - (line 25) | -* x-axis: Legending. (line 51) | -* xcons: SRFI-1. (line 15) | -* xRGB->CIEXYZ: Color Conversions. (line 51) | -* xrgb->color: Color Spaces. (line 215) | -* xRGB->sRGB: Color Conversions. (line 54) | -* xyY->XYZ: Spectra. (line 188) | -* xyY:normalize-colors: Spectra. (line 190) | -* XYZ->chromaticity: Spectra. (line 165) | -* XYZ->xyY: Spectra. (line 184) | -* y-axis: Legending. (line 48) | -* zenith-xyy: Daylight. (line 70) | -* zip: SRFI-1. (line 98) | + (line 25) +* x-axis: Legending. (line 51) +* x1: Legacy Plotting. (line 18) | +* xcons: SRFI-1. (line 15) +* xRGB->CIEXYZ: Color Conversions. (line 51) +* xrgb->color: Color Spaces. (line 215) +* xRGB->sRGB: Color Conversions. (line 54) +* xyY->XYZ: Spectra. (line 188) +* xyY:normalize-colors: Spectra. (line 190) +* XYZ->chromaticity: Spectra. (line 165) +* XYZ->xyY: Spectra. (line 184) +* y-axis: Legending. (line 48) +* zenith-xyy: Daylight. (line 70) +* zip: SRFI-1. (line 98) Variable Index ************** This is an alphabetical list of all the global variables in SLIB. - + * Menu: -* *argv*: Getopt. (line 25) | -* *base-table-implementations*: Base Table. (line 52) | -* *catalog*: Require. (line 10) | -* *http:byline*: HTTP and CGI. (line 17) | -* *operating-system*: Batch. (line 41) | -* *optarg*: Getopt. (line 35) | -* *optind*: Getopt. (line 30) | -* *qp-width*: Quick Print. (line 28) | +* *argv*: Getopt. (line 25) +* *base-table-implementations*: Base Table. (line 52) +* *catalog*: Require. (line 10) +* *http:byline*: HTTP and CGI. (line 17) +* *operating-system*: Batch. (line 41) +* *optarg*: Getopt. (line 35) +* *optind*: Getopt. (line 30) +* *qp-width*: Quick Print. (line 28) * *random-state*: Exact Random Numbers. - (line 21) | -* *ruleset*: Commutative Rings. (line 76) | + (line 21) +* *ruleset*: Commutative Rings. (line 76) * *syn-defs*: Ruleset Definition and Use. - (line 7) | + (line 7) * *syn-ignore-whitespace*: Ruleset Definition and Use. - (line 12) | -* *timezone*: Time Zone. (line 111) | -* atm-hec-polynomial: Cyclic Checksum. (line 115) | -* bottomedge: Legending. (line 18) | -* char-code-limit: Configuration. (line 11) | -* charplot:dimensions: Character Plotting. (line 9) | -* CIEXYZ:A: Color Conversions. (line 21) | -* CIEXYZ:B: Color Conversions. (line 22) | -* CIEXYZ:C: Color Conversions. (line 23) | -* CIEXYZ:D50: Color Conversions. (line 17) | -* CIEXYZ:D65: Color Conversions. (line 13) | -* CIEXYZ:E: Color Conversions. (line 24) | -* crc-08-polynomial: Cyclic Checksum. (line 109) | -* crc-10-polynomial: Cyclic Checksum. (line 98) | -* crc-12-polynomial: Cyclic Checksum. (line 77) | -* crc-16-polynomial: Cyclic Checksum. (line 69) | -* crc-32-polynomial: Cyclic Checksum. (line 45) | -* crc-ccitt-polynomial: Cyclic Checksum. (line 61) | -* D50: Color Data-Type. (line 120) | -* D65: Color Data-Type. (line 116) | -* daylight?: Time Zone. (line 117) | -* debug:max-count: Trace. (line 24) | -* distribute*: Commutative Rings. (line 100) | -* distribute/: Commutative Rings. (line 104) | -* dowcrc-polynomial: Cyclic Checksum. (line 120) | -* graph:dimensions: Legacy Plotting. (line 7) | -* graphrect: Rectangles. (line 26) | -* leftedge: Legending. (line 22) | -* most-positive-fixnum: Configuration. (line 15) | -* nil: Miscellany. (line 70) | + (line 12) +* *timezone*: Time Zone. (line 111) +* atm-hec-polynomial: Cyclic Checksum. (line 115) +* bottomedge: Legending. (line 18) +* char-code-limit: Configuration. (line 11) +* charplot:dimensions: Character Plotting. (line 9) +* CIEXYZ:A: Color Conversions. (line 21) +* CIEXYZ:B: Color Conversions. (line 22) +* CIEXYZ:C: Color Conversions. (line 23) +* CIEXYZ:D50: Color Conversions. (line 17) +* CIEXYZ:D65: Color Conversions. (line 13) +* CIEXYZ:E: Color Conversions. (line 24) +* crc-08-polynomial: Cyclic Checksum. (line 109) +* crc-10-polynomial: Cyclic Checksum. (line 98) +* crc-12-polynomial: Cyclic Checksum. (line 77) +* crc-16-polynomial: Cyclic Checksum. (line 69) +* crc-32-polynomial: Cyclic Checksum. (line 45) +* crc-ccitt-polynomial: Cyclic Checksum. (line 61) +* D50: Color Data-Type. (line 120) +* D65: Color Data-Type. (line 116) +* daylight?: Time Zone. (line 117) +* debug:max-count: Trace. (line 24) +* distribute*: Commutative Rings. (line 100) +* distribute/: Commutative Rings. (line 104) +* dowcrc-polynomial: Cyclic Checksum. (line 120) +* graph:dimensions: Legacy Plotting. (line 7) +* graphrect: Rectangles. (line 26) +* leftedge: Legending. (line 22) +* most-positive-fixnum: Configuration. (line 15) +* nil: Miscellany. (line 70) * number-wt-type: Construction of Weight-Balanced Trees. - (line 39) | -* plotrect: Rectangles. (line 22) | -* prime:prngs: Prime Numbers. (line 9) | -* prime:trials: Prime Numbers. (line 24) | -* rightedge: Legending. (line 23) | -* slib:form-feed: Configuration. (line 29) | -* slib:tab: Configuration. (line 26) | + (line 39) +* plotrect: Rectangles. (line 22) +* prime:prngs: Prime Numbers. (line 9) +* prime:trials: Prime Numbers. (line 24) +* rightedge: Legending. (line 23) +* slib:form-feed: Configuration. (line 29) +* slib:tab: Configuration. (line 26) * stderr: Standard Formatted I/O. - (line 25) | + (line 25) * stdin: Standard Formatted I/O. - (line 19) | + (line 19) * stdout: Standard Formatted I/O. - (line 22) | + (line 22) * string-wt-type: Construction of Weight-Balanced Trees. - (line 45) | -* subarray0: Subarrays. (line 41) | -* t: Miscellany. (line 67) | -* tok:decimal-digits: Token definition. (line 41) | -* tok:lower-case: Token definition. (line 48) | -* tok:upper-case: Token definition. (line 44) | -* tok:whitespaces: Token definition. (line 52) | -* topedge: Legending. (line 17) | -* tzname: Time Zone. (line 123) | -* usb-token-polynomial: Cyclic Checksum. (line 124) | + (line 45) +* subarray0: Subarrays. (line 41) +* t: Miscellany. (line 67) +* tok:decimal-digits: Token definition. (line 41) +* tok:lower-case: Token definition. (line 48) +* tok:upper-case: Token definition. (line 44) +* tok:whitespaces: Token definition. (line 52) +* topedge: Legending. (line 17) +* tzname: Time Zone. (line 123) +* usb-token-polynomial: Cyclic Checksum. (line 124) Concept and Feature Index ************************* - + * Menu: -* aggregate <1>: Module Semantics. (line 20) | -* aggregate: Library Catalogs. (line 24) | -* alarm: Multi-Processing. (line 10) | -* alarm-interrupt: Multi-Processing. (line 10) | -* alist: Association Lists. (line 6) | +* =>: Guarded COND Clause. (line 21) | +* aggregate <1>: Module Semantics. (line 20) +* aggregate: Library Catalogs. (line 24) +* alarm: Multi-Processing. (line 10) +* alarm-interrupt: Multi-Processing. (line 10) +* alist: Association Lists. (line 6) * alist-table <1>: Relational Database Objects. - (line 23) | -* alist-table <2>: The Base. (line 12) | -* alist-table: Base Table. (line 16) | -* ange-ftp: URI. (line 118) | -* appearance: Solid Modeling. (line 320) | -* array: Arrays. (line 6) | -* array-for-each: Array Mapping. (line 6) | -* association function: Association Lists. (line 17) | -* attribute-value: HTML. (line 10) | -* Auto-sharing: Using Databases. (line 25) | + (line 23) +* alist-table <2>: The Base. (line 12) +* alist-table: Base Table. (line 16) +* and-let*: Guarded LET* special form. | + (line 6) | +* ange-ftp: URI. (line 118) +* appearance: Solid Modeling. (line 320) +* array: Arrays. (line 6) +* array-for-each: Array Mapping. (line 6) +* association function: Association Lists. (line 17) +* attribute-value: HTML. (line 10) +* Auto-sharing: Using Databases. (line 25) * balanced binary trees: Weight-Balanced Trees. - (line 8) | -* base: URI. (line 39) | -* base-table: Base Table. (line 6) | -* batch: Batch. (line 6) | -* binary: Byte. (line 56) | + (line 8) +* base: URI. (line 39) +* base-table: Base Table. (line 6) +* batch: Batch. (line 6) +* binary: Byte. (line 56) * binary trees: Weight-Balanced Trees. - (line 8) | + (line 8) * binary trees, as discrete maps: Weight-Balanced Trees. - (line 52) | + (line 52) * binary trees, as sets: Weight-Balanced Trees. - (line 52) | + (line 52) * binding power: Precedence Parsing Overview. - (line 22) | -* break: Breakpoints. (line 6) | -* byte: Byte. (line 6) | + (line 22) +* break: Breakpoints. (line 6) +* byte: Byte. (line 6) * byte-number: Byte/Number Conversions. - (line 6) | -* calendar time <1>: Posix Time. (line 10) | -* calendar time: Time and Date. (line 16) | -* Calendar-Time: Posix Time. (line 10) | -* caltime: Posix Time. (line 10) | -* canonical: Color Names. (line 16) | -* careful: Commutative Rings. (line 14) | -* catalog: Require. (line 6) | -* Catalog File: Library Catalogs. (line 6) | -* certificate: Transactions. (line 36) | -* cgi: HTTP and CGI. (line 6) | -* chapter-order: Chapter Ordering. (line 6) | -* charplot: Character Plotting. (line 6) | -* Chroma: Color Spaces. (line 141) | -* cie1931: Spectra. (line 31) | -* cie1964: Spectra. (line 27) | -* ciexyz: Spectra. (line 35) | -* CIEXYZ: Color Spaces. (line 18) | -* cksum-string: Cyclic Checksum. (line 160) | -* coerce: Type Coercion. (line 6) | -* collect: Collections. (line 6) | -* color-database: Color Names. (line 65) | -* color-names: Color Names. (line 6) | -* command line: Command Line. (line 10) | -* commentfix: Rule Types. (line 35) | + (line 6) +* calendar time <1>: Posix Time. (line 10) +* calendar time: Time and Date. (line 16) +* Calendar-Time: Posix Time. (line 10) +* caltime: Posix Time. (line 10) +* canonical: Color Names. (line 16) +* careful: Commutative Rings. (line 14) +* catalog: Require. (line 6) +* Catalog File: Library Catalogs. (line 6) +* certificate: Transactions. (line 36) +* cgi: HTTP and CGI. (line 6) +* chapter-order: Chapter Ordering. (line 6) +* charplot: Character Plotting. (line 6) +* Chroma: Color Spaces. (line 141) +* cie1931: Spectra. (line 31) +* cie1964: Spectra. (line 27) +* ciexyz: Spectra. (line 35) +* CIEXYZ: Color Spaces. (line 18) +* cksum-string: Cyclic Checksum. (line 160) +* coerce: Type Coercion. (line 6) +* collect: Collections. (line 6) +* color-database: Color Names. (line 65) +* color-names: Color Names. (line 6) +* command line: Command Line. (line 10) +* commentfix: Rule Types. (line 35) * common-list-functions <1>: Common List Functions. - (line 6) | -* common-list-functions: Collections. (line 74) | -* commutative-ring: Commutative Rings. (line 11) | -* compiled: Library Catalogs. (line 21) | -* compiling: Module Conventions. (line 11) | -* Coordinated Universal Time: Posix Time. (line 13) | -* copyright: Copyrights. (line 6) | -* crc: Cyclic Checksum. (line 6) | -* cvs: CVS. (line 6) | -* database-commands: Command Example. (line 10) | -* databases <1>: Command Example. (line 11) | + (line 6) +* common-list-functions: Collections. (line 74) +* commutative-ring: Commutative Rings. (line 11) +* compiled: Library Catalogs. (line 21) +* compiling: Module Conventions. (line 11) +* Coordinated Universal Time: Posix Time. (line 13) +* copyright: Copyrights. (line 6) +* crc: Cyclic Checksum. (line 6) +* cvs: CVS. (line 6) +* database-commands: Command Example. (line 10) +* databases <1>: Command Example. (line 11) * databases <2>: Define-tables Example. - (line 12) | -* databases <3>: Using Databases. (line 6) | -* databases: Batch. (line 145) | -* daylight: Daylight. (line 6) | -* db->html: HTML Tables. (line 6) | -* debug <1>: Breakpoints. (line 11) | -* debug: Debug. (line 6) | -* defmacro: Library Catalogs. (line 31) | -* defmacroexpand <1>: Pretty-Print. (line 88) | -* defmacroexpand: Defmacro. (line 48) | -* delim: Rule Types. (line 47) | -* dequeues: Queues. (line 10) | -* determinant: Matrix Algebra. (line 6) | -* diff: Sequence Comparison. (line 6) | -* directory: Directories. (line 6) | + (line 12) +* databases <3>: Using Databases. (line 6) +* databases: Batch. (line 145) +* daylight: Daylight. (line 6) +* db->html: HTML Tables. (line 6) +* debug <1>: Breakpoints. (line 11) +* debug: Debug. (line 6) +* define-record-type: Define-Record-Type. (line 6) | +* defmacro: Library Catalogs. (line 31) +* defmacroexpand <1>: Pretty-Print. (line 88) +* defmacroexpand: Defmacro. (line 48) +* delim: Rule Types. (line 47) +* dequeues: Queues. (line 10) +* determinant: Matrix Algebra. (line 6) +* diff: Sequence Comparison. (line 6) +* directory: Directories. (line 6) * Discrete Fourier Transform: Fast Fourier Transform. - (line 11) | + (line 11) * discrete maps, using binary trees: Weight-Balanced Trees. - (line 52) | -* DrScheme: Installation. (line 103) | -* dynamic: Dynamic Data Type. (line 6) | -* dynamic-wind: Dynamic-Wind. (line 6) | -* e-sRGB: Color Spaces. (line 218) | -* emacs: Transactions. (line 33) | -* Encapsulated-PostScript: PostScript Graphing. (line 23) | -* escaped: URI. (line 77) | -* EUC: Extra-SLIB Packages. (line 53) | -* Euclidean Domain: Commutative Rings. (line 67) | -* eval: Eval. (line 6) | -* exchanger: Miscellany. (line 31) | -* factor: Prime Numbers. (line 6) | -* feature <1>: About this manual. (line 13) | -* feature <2>: Require. (line 18) | -* feature: Feature. (line 6) | + (line 52) +* DrScheme: Installation. (line 103) +* dynamic: Dynamic Data Type. (line 6) +* dynamic-wind: Dynamic-Wind. (line 6) +* e-sRGB: Color Spaces. (line 218) +* emacs: Transactions. (line 33) +* Encapsulated-PostScript: PostScript Graphing. (line 23) +* escaped: URI. (line 77) +* EUC: Extra-SLIB Packages. (line 53) +* Euclidean Domain: Commutative Rings. (line 67) +* eval: Eval. (line 6) +* exchanger: Miscellany. (line 31) +* factor: Prime Numbers. (line 6) +* feature <1>: About this manual. (line 13) +* feature <2>: Require. (line 18) +* feature: Feature. (line 6) * fft: Fast Fourier Transform. - (line 6) | -* File Transfer Protocol: URI. (line 113) | -* file-lock: Transactions. (line 32) | -* filename: Filenames. (line 6) | -* fluid-let: Fluid-Let. (line 6) | -* form: HTML. (line 63) | -* format: Format. (line 6) | -* Gambit-C: Installation. (line 116) | -* gamut: Color Spaces. (line 18) | -* generic-write: Generic-Write. (line 6) | -* getit: URI. (line 118) | -* getopt <1>: Command Example. (line 14) | -* getopt: Getopt. (line 6) | -* getopt-parameters <1>: Command Example. (line 12) | + (line 6) +* File Transfer Protocol: URI. (line 113) +* file-lock: Transactions. (line 32) +* filename: Filenames. (line 6) +* fluid-let: Fluid-Let. (line 6) +* form: HTML. (line 63) +* format: Format. (line 6) +* Gambit-C: Installation. (line 116) +* gamut: Color Spaces. (line 18) +* generic-write: Generic-Write. (line 6) +* getit: URI. (line 118) +* getopt <1>: Command Example. (line 14) +* getopt: Getopt. (line 6) +* getopt-parameters <1>: Command Example. (line 12) * getopt-parameters: Getopt Parameter lists. - (line 6) | -* glob <1>: Batch. (line 148) | -* glob: Filenames. (line 6) | -* Gray code: Hilbert Space-Filling Curve. | - (line 52) | -* Guile: Installation. (line 119) | -* hash: Hashing. (line 6) | -* hash-table: Hash Tables. (line 6) | -* Hilbert: Hilbert Space-Filling Curve. | - (line 8) | -* Hilbert Space-Filling Curve: Hilbert Space-Filling Curve. | - (line 8) | -* hilbert-fill: Hilbert Space-Filling Curve. | - (line 6) | -* HOME <1>: Vicinity. (line 51) | -* HOME: Catalog Creation. (line 19) | -* homecat: Catalog Vicinities. (line 35) | -* html-for-each: Parsing HTML. (line 6) | -* html-form: HTML. (line 6) | -* http: HTTP and CGI. (line 6) | -* Hue: Color Spaces. (line 143) | -* ICC Profile: Color Spaces. (line 191) | -* implcat: Catalog Vicinities. (line 23) | + (line 6) +* glob <1>: Batch. (line 148) +* glob: Filenames. (line 6) +* Gray code: Hilbert Space-Filling Curve. + (line 52) +* guarded-cond-clause: Guarded COND Clause. (line 6) | +* Guile: Installation. (line 119) +* hash: Hashing. (line 6) +* hash-table: Hash Tables. (line 6) +* Hilbert: Hilbert Space-Filling Curve. + (line 8) +* Hilbert Space-Filling Curve: Hilbert Space-Filling Curve. + (line 8) +* hilbert-fill: Hilbert Space-Filling Curve. + (line 6) +* HOME <1>: Vicinity. (line 51) +* HOME: Catalog Creation. (line 19) +* homecat: Catalog Vicinities. (line 35) +* html-for-each: Parsing HTML. (line 6) +* html-form: HTML. (line 6) +* http: HTTP and CGI. (line 6) +* Hue: Color Spaces. (line 143) +* ICC Profile: Color Spaces. (line 191) +* implcat: Catalog Vicinities. (line 23) * indexed-sequential-access-method: Byte/Number Conversions. - (line 120) | -* infix: Rule Types. (line 19) | + (line 127) | +* infix: Rule Types. (line 19) * Info: Top-level Variable References. - (line 32) | -* inmatchfix: Rule Types. (line 43) | -* install: Installation. (line 6) | -* installation: Installation. (line 6) | -* intrinsic feature: Feature. (line 9) | + (line 32) +* inmatchfix: Rule Types. (line 43) +* install: Installation. (line 6) +* installation: Installation. (line 6) +* intrinsic feature: Feature. (line 9) * ISAM: Indexed Sequential Access Methods. - (line 6) | -* Japanese: Extra-SLIB Packages. (line 53) | -* JFILTER: Extra-SLIB Packages. (line 53) | -* JIS: Extra-SLIB Packages. (line 53) | -* L*a*b*: Color Spaces. (line 68) | -* L*C*h: Color Spaces. (line 135) | -* L*u*v*: Color Spaces. (line 98) | -* lamination: Hilbert Space-Filling Curve. | - (line 88) | + (line 6) +* Japanese: Extra-SLIB Packages. (line 53) +* JFILTER: Extra-SLIB Packages. (line 53) +* JIS: Extra-SLIB Packages. (line 53) +* L*a*b*: Color Spaces. (line 68) +* L*C*h: Color Spaces. (line 135) +* L*u*v*: Color Spaces. (line 98) +* lamination: Hilbert Space-Filling Curve. + (line 88) * Left Denotation, led: Nud and Led Definition. - (line 13) | -* Lightness: Color Spaces. (line 71) | -* line-i: Line I/O. (line 6) | -* list-processing library: SRFI-1. (line 8) | + (line 13) +* Lightness: Color Spaces. (line 71) +* line-i: Line I/O. (line 6) +* list-processing library: SRFI-1. (line 8) * load-option: Weight-Balanced Trees. - (line 73) | -* logical: Bit-Twiddling. (line 6) | -* macro <1>: Repl. (line 32) | -* macro <2>: R4RS Macros. (line 6) | -* macro: Library Catalogs. (line 37) | -* macro-by-example <1>: Macro by Example. (line 6) | -* macro-by-example: Library Catalogs. (line 34) | -* macros-that-work <1>: Macros That Work. (line 6) | -* macros-that-work: Library Catalogs. (line 40) | -* manifest: Module Manifests. (line 6) | -* match: Match Keys. (line 6) | -* match-keys <1>: Match Keys. (line 6) | -* match-keys: Match-Keys. (line 6) | -* matchfix: Rule Types. (line 39) | -* matfile: MAT-File Format. (line 6) | -* matlab: MAT-File Format. (line 6) | -* metric-units: Metric Units. (line 6) | -* minimize: Minimizing. (line 6) | + (line 73) +* logical: Bit-Twiddling. (line 6) +* macro <1>: Repl. (line 32) +* macro <2>: R4RS Macros. (line 6) +* macro: Library Catalogs. (line 37) +* macro-by-example <1>: Macro by Example. (line 6) +* macro-by-example: Library Catalogs. (line 34) +* macros-that-work <1>: Macros That Work. (line 6) +* macros-that-work: Library Catalogs. (line 40) +* manifest: Module Manifests. (line 6) +* match: Match Keys. (line 6) +* match-keys <1>: Match Keys. (line 6) +* match-keys: Match-Keys. (line 6) +* matchfix: Rule Types. (line 39) +* matfile: MAT-File Format. (line 6) +* matlab: MAT-File Format. (line 6) +* metric-units: Metric Units. (line 6) +* minimize: Minimizing. (line 6) * minimum field width (printf): Standard Formatted Output. - (line 88) | -* MIT Scheme: Installation. (line 113) | -* mkimpcat.scm: Catalog Vicinities. (line 28) | -* mklibcat.scm: Catalog Vicinities. (line 16) | -* modular: Modular Arithmetic. (line 6) | + (line 88) +* MIT Scheme: Installation. (line 113) +* mkimpcat.scm: Catalog Vicinities. (line 28) +* mklibcat.scm: Catalog Vicinities. (line 16) +* modular: Modular Arithmetic. (line 6) * multiarg: Multi-argument / and -. - (line 6) | + (line 6) * multiarg-apply: Multi-argument Apply. - (line 6) | -* MzScheme: Installation. (line 104) | -* nary: Rule Types. (line 23) | -* new-catalog: Catalog Creation. (line 48) | -* nofix: Rule Types. (line 11) | -* null: HTML Tables. (line 92) | + (line 6) +* MzScheme: Installation. (line 104) +* nary: Rule Types. (line 23) +* new-catalog: Catalog Creation. (line 48) +* nofix: Rule Types. (line 11) +* null: HTML Tables. (line 92) * Null Denotation, nud: Nud and Led Definition. - (line 9) | -* object: Object. (line 6) | -* object->string: Object-To-String. (line 6) | -* oop: Yasos. (line 6) | + (line 9) +* object: Object. (line 6) +* object->string: Object-To-String. (line 6) +* oop: Yasos. (line 6) * option, run-time-loadable: Weight-Balanced Trees. - (line 69) | -* options file: Command Line. (line 65) | -* parameters <1>: Command Example. (line 13) | -* parameters <2>: Batch. (line 146) | -* parameters: Parameter lists. (line 6) | -* parse: Precedence Parsing. (line 6) | + (line 69) +* options file: Command Line. (line 65) +* parameters <1>: Command Example. (line 13) +* parameters <2>: Batch. (line 146) +* parameters: Parameter lists. (line 6) +* parse: Precedence Parsing. (line 6) * pbm: Portable Image Files. - (line 22) | + (line 22) * pbm-raw: Portable Image Files. - (line 22) | + (line 22) +* peano-fill: Peano Space-Filling Curve. | + (line 6) | * pgm: Portable Image Files. - (line 26) | + (line 26) * pgm-raw: Portable Image Files. - (line 26) | -* plain-text: HTML. (line 14) | -* PLT Scheme: Installation. (line 102) | + (line 26) +* plain-text: HTML. (line 14) +* PLT Scheme: Installation. (line 102) * pnm: Portable Image Files. - (line 6) | + (line 6) * portable bitmap graphics: Portable Image Files. - (line 9) | -* posix-time: Posix Time. (line 7) | -* postfix: Rule Types. (line 27) | + (line 9) +* posix-time: Posix Time. (line 7) +* postfix: Rule Types. (line 27) * ppm: Portable Image Files. - (line 31) | + (line 31) * ppm-raw: Portable Image Files. - (line 31) | -* pprint-file: Pretty-Print. (line 60) | -* PRE: HTML. (line 50) | -* precedence: Precedence Parsing. (line 6) | + (line 31) +* pprint-file: Pretty-Print. (line 60) +* PRE: HTML. (line 50) +* precedence: Precedence Parsing. (line 6) * precision (printf): Standard Formatted Output. - (line 101) | -* prefix: Rule Types. (line 15) | -* prestfix: Rule Types. (line 31) | -* pretty-print: Pretty-Print. (line 6) | -* primes: Prime Numbers. (line 6) | + (line 101) +* prefix: Rule Types. (line 15) +* prestfix: Rule Types. (line 31) +* pretty-print: Pretty-Print. (line 6) +* primes: Prime Numbers. (line 6) * printf: Standard Formatted Output. - (line 6) | -* priority-queue: Priority Queues. (line 6) | -* PRNG: Random Numbers. (line 6) | -* process: Multi-Processing. (line 6) | -* Prolog: Extra-SLIB Packages. (line 49) | -* promise: Promises. (line 6) | -* PSD: Extra-SLIB Packages. (line 26) | -* qp <1>: Quick Print. (line 6) | -* qp: Getopt. (line 146) | -* query-string: HTTP and CGI. (line 36) | -* queue: Queues. (line 6) | -* r2rs: RnRS. (line 11) | -* r3rs <1>: Coding Guidelines. (line 10) | -* r3rs: RnRS. (line 16) | -* r4rs: RnRS. (line 24) | -* r5rs: RnRS. (line 29) | + (line 6) +* priority-queue: Priority Queues. (line 6) +* PRNG: Random Numbers. (line 6) +* process: Multi-Processing. (line 6) +* Prolog: Extra-SLIB Packages. (line 49) +* promise: Promises. (line 6) +* PSD: Extra-SLIB Packages. (line 26) +* qp <1>: Quick Print. (line 6) +* qp: Getopt. (line 146) +* query-string: HTTP and CGI. (line 36) +* queue: Queues. (line 6) +* r2rs: RnRS. (line 11) +* r3rs <1>: Coding Guidelines. (line 10) +* r3rs: RnRS. (line 16) +* r4rs: RnRS. (line 24) +* r5rs: RnRS. (line 29) * random: Exact Random Numbers. - (line 6) | + (line 6) * random-inexact: Inexact Random Numbers. + (line 6) +* range: Column Ranges. (line 6) +* rationalize: Rationalize. (line 6) +* read-command: Command Line. (line 6) +* receive: Binding to multiple values. | (line 6) | -* range: Column Ranges. (line 6) | -* rationalize: Rationalize. (line 6) | -* read-command: Command Line. (line 6) | -* record: Records. (line 6) | -* rectangle: Rectangles. (line 6) | -* relational-database: Relational Database. (line 6) | -* relational-system: Using Databases. (line 53) | -* repl <1>: Repl. (line 6) | -* repl: Syntax-Case Macros. (line 61) | -* resene: Color Names. (line 126) | -* Resene: Color Names. (line 95) | -* reset: HTML. (line 95) | -* rev2-procedures: Rev2 Procedures. (line 6) | +* record: Records. (line 6) +* rectangle: Rectangles. (line 6) +* relational-database: Relational Database. (line 6) +* relational-system: Using Databases. (line 53) +* repl <1>: Repl. (line 6) +* repl: Syntax-Case Macros. (line 61) +* resene: Color Names. (line 126) +* Resene: Color Names. (line 95) +* reset: HTML. (line 95) +* rev2-procedures: Rev2 Procedures. (line 6) * rev4-optional-procedures: Rev4 Optional Procedures. - (line 6) | -* RGB709: Color Spaces. (line 37) | -* ring, commutative: Commutative Rings. (line 11) | -* RNG: Random Numbers. (line 6) | -* root: Root Finding. (line 6) | + (line 6) +* RGB709: Color Spaces. (line 37) +* ring, commutative: Commutative Rings. (line 11) +* RNG: Random Numbers. (line 6) +* root: Root Finding. (line 6) * run-time-loadable option: Weight-Balanced Trees. - (line 69) | -* rwb-isam: Base Table. (line 39) | -* saturate: Color Names. (line 95) | + (line 69) +* rwb-isam: Base Table. (line 39) +* saturate: Color Names. (line 95) * scanf: Standard Formatted Input. - (line 6) | -* SCHELOG: Extra-SLIB Packages. (line 49) | -* scheme: URI. (line 99) | -* Scheme Request For Implementation: SRFI. (line 8) | -* Scheme48: Installation. (line 137) | -* schmooz: Schmooz. (line 6) | -* SCM: Installation. (line 97) | -* script: Installation. (line 37) | -* self-set: Commutative Rings. (line 17) | -* Sequence Comparison: Sequence Comparison. (line 6) | -* Server-based Naming Authority: URI. (line 58) | -* session: Feature. (line 7) | + (line 6) +* SCHELOG: Extra-SLIB Packages. (line 49) +* scheme: URI. (line 99) +* Scheme Request For Implementation: SRFI. (line 8) +* Scheme48: Installation. (line 137) +* schmooz: Schmooz. (line 6) +* SCM: Installation. (line 97) +* script: Installation. (line 37) +* self-set: Commutative Rings. (line 17) +* Sequence Comparison: Sequence Comparison. (line 6) +* Server-based Naming Authority: URI. (line 58) +* session: Feature. (line 7) * sets, using binary trees: Weight-Balanced Trees. - (line 52) | -* shell: Command Line. (line 12) | -* sierpinski: Sierpinski Curve. (line 6) | -* sitecat: Catalog Vicinities. (line 19) | -* sky: Daylight. (line 6) | -* slib: Installation. (line 37) | -* slibcat: Catalog Vicinities. (line 11) | -* solid: Solid Modeling. (line 6) | -* solid-modeling: Solid Modeling. (line 6) | -* solids: Solid Modeling. (line 6) | -* sort: Sorting. (line 6) | -* soundex: Soundex. (line 6) | -* source: Library Catalogs. (line 18) | -* Space-Filling: Hilbert Space-Filling Curve. | - (line 8) | -* sparse: MAT-File Format. (line 15) | -* Spectral Tristimulus Values: Spectra. (line 24) | -* spiff: Sequence Comparison. (line 29) | -* srfi: SRFI. (line 6) | -* SRFI-1: SRFI-1. (line 8) | -* srfi-1: SRFI-1. (line 6) | -* srfi-2: SRFI-2. (line 6) | -* srfi-8: SRFI-8. (line 6) | -* srfi-9: SRFI-9. (line 6) | -* sRGB: Color Spaces. (line 189) | + (line 52) +* shell: Command Line. (line 12) +* sierpinski: Sierpinski Curve. (line 6) +* sitecat: Catalog Vicinities. (line 19) +* sky: Daylight. (line 6) +* slib: Installation. (line 37) +* slibcat: Catalog Vicinities. (line 11) +* solid: Solid Modeling. (line 6) +* solid-modeling: Solid Modeling. (line 6) +* solids: Solid Modeling. (line 6) +* sort: Sorting. (line 6) +* soundex: Soundex. (line 6) +* source: Library Catalogs. (line 18) +* Space-Filling: Hilbert Space-Filling Curve. + (line 8) +* sparse: MAT-File Format. (line 15) +* Spectral Tristimulus Values: Spectra. (line 24) +* spiff: Sequence Comparison. (line 29) +* srfi: SRFI. (line 6) +* SRFI-1: SRFI-1. (line 8) +* srfi-1: SRFI-1. (line 6) +* srfi-2: Guarded LET* special form. | + (line 6) | +* srfi-61: Guarded COND Clause. (line 6) | +* srfi-8: Binding to multiple values. | + (line 6) | +* srfi-9: Define-Record-Type. (line 6) | +* sRGB: Color Spaces. (line 189) * stdio: Standard Formatted I/O. - (line 14) | -* string-case: String-Case. (line 6) | -* string-port: String Ports. (line 6) | -* string-search: String Search. (line 6) | -* subarray: Subarrays. (line 6) | -* sun: Daylight. (line 6) | -* sunlight: Daylight. (line 6) | -* symmetric: Modular Arithmetic. (line 54) | -* syntactic-closures <1>: Syntactic Closures. (line 6) | -* syntactic-closures: Library Catalogs. (line 46) | + (line 14) +* string-case: String-Case. (line 6) +* string-port: String Ports. (line 6) +* string-search: String Search. (line 6) +* subarray: Subarrays. (line 6) +* sun: Daylight. (line 6) +* sunlight: Daylight. (line 6) +* symmetric: Modular Arithmetic. (line 54) +* syntactic-closures <1>: Syntactic Closures. (line 6) +* syntactic-closures: Library Catalogs. (line 46) * syntax tree: Precedence Parsing Overview. - (line 32) | -* syntax-case <1>: Syntax-Case Macros. (line 6) | -* syntax-case: Library Catalogs. (line 43) | -* time: Time and Date. (line 16) | -* time-zone: Time Zone. (line 63) | + (line 32) +* syntax-case <1>: Syntax-Case Macros. (line 6) +* syntax-case: Library Catalogs. (line 43) +* time: Time and Date. (line 16) +* time-zone: Time Zone. (line 63) * top-level variable references: Top-level Variable References. - (line 6) | + (line 6) * top-refs: Top-level Variable References. - (line 6) | -* topological-sort: Topological Sort. (line 6) | -* trace: Trace. (line 6) | -* transact: Transactions. (line 10) | -* transcript: Transcripts. (line 6) | -* tree: Tree Operations. (line 6) | + (line 6) +* topological-sort: Topological Sort. (line 6) +* trace: Trace. (line 6) +* transact: Transactions. (line 10) +* transcript: Transcripts. (line 6) +* tree: Tree Operations. (line 6) * trees, balanced binary: Weight-Balanced Trees. - (line 8) | -* tristimulus: Color Spaces. (line 9) | -* tsort: Topological Sort. (line 6) | -* turbidity: Daylight. (line 31) | -* TZ-string: Time Zone. (line 9) | -* Uniform Resource Identifiers: URI. (line 8) | -* Uniform Resource Locator: URI. (line 118) | -* Unique Factorization: Commutative Rings. (line 67) | -* unsafe: URI. (line 77) | -* URI: URI. (line 71) | -* uri: URI. (line 6) | -* URI: HTTP and CGI. (line 36) | -* usercat: Catalog Vicinities. (line 38) | -* UTC: Posix Time. (line 13) | -* values: Values. (line 6) | + (line 8) +* tristimulus: Color Spaces. (line 9) +* tsort: Topological Sort. (line 6) +* turbidity: Daylight. (line 31) +* TZ-string: Time Zone. (line 9) +* Uniform Resource Identifiers: URI. (line 8) +* Uniform Resource Locator: URI. (line 118) +* Unique Factorization: Commutative Rings. (line 67) +* unsafe: URI. (line 77) +* URI: URI. (line 71) +* uri: URI. (line 6) +* URI: HTTP and CGI. (line 36) +* usercat: Catalog Vicinities. (line 38) +* UTC: Posix Time. (line 13) +* values: Values. (line 6) * variable references: Top-level Variable References. - (line 6) | -* vet: Module Analysis. (line 6) | -* VSCM: Installation. (line 148) | -* WB: Base Table. (line 34) | -* wb-table: Base Table. (line 32) | + (line 6) +* vet: Module Analysis. (line 6) +* VSCM: Installation. (line 148) +* WB: Base Table. (line 34) +* wb-table: Base Table. (line 32) * weight-balanced binary trees: Weight-Balanced Trees. - (line 8) | -* wget: Color Names. (line 81) | -* white point: Color Data-Type. (line 107) | -* wild-card: Match Keys. (line 6) | -* with-file: With-File. (line 6) | -* Word: Transactions. (line 34) | + (line 8) +* wget: Color Names. (line 81) +* white point: Color Data-Type. (line 107) +* wild-card: Match Keys. (line 6) +* with-file: With-File. (line 6) +* Word: Transactions. (line 34) * wt-tree: Weight-Balanced Trees. - (line 6) | -* xRGB: Color Spaces. (line 204) | -* xyY: Spectra. (line 175) | -* yasos: Yasos. (line 6) | + (line 6) +* xRGB: Color Spaces. (line 204) +* xyY: Spectra. (line 175) +* yasos: Yasos. (line 6) Tag Table: -Node: Top1050 -Node: The Library System1830 -Node: Feature2245 +Node: Top1038 +Node: The Library System1818 +Node: Feature2115 Ref: Feature-Footnote-14358 -Node: Require5422 -Node: Library Catalogs8232 -Node: Catalog Creation9818 -Node: Catalog Vicinities12409 -Node: Compiling Scheme15318 -Node: Module Conventions16086 +Node: Require4694 +Node: Library Catalogs7107 +Node: Catalog Creation8538 +Node: Catalog Vicinities10959 +Node: Compiling Scheme13719 +Node: Module Conventions14369 Ref: Module Conventions-Footnote-115790 -Node: Module Manifests17905 -Node: Module Semantics24174 -Node: Top-level Variable References25906 +Node: Module Manifests16040 +Node: Module Semantics21512 +Node: Top-level Variable References23130 Ref: Top-level Variable References-Footnote-125205 -Node: Module Analysis28540 -Node: Universal SLIB Procedures29984 -Node: Vicinity30703 -Node: Configuration35672 -Node: Input/Output39213 -Node: System43424 -Node: Miscellany47174 -Node: Scheme Syntax Extension Packages50488 -Node: Defmacro51328 -Node: R4RS Macros53936 -Node: Macro by Example55457 -Node: Macros That Work58668 -Node: Syntactic Closures65450 -Node: Syntax-Case Macros84160 -Node: Define-Structure88676 -Node: Fluid-Let92589 -Node: Yasos93779 -Node: Yasos terms94719 -Node: Yasos interface95891 -Node: Setters98343 -Node: Yasos examples101344 -Node: Textual Conversion Packages104430 -Node: Precedence Parsing105331 -Node: Precedence Parsing Overview106130 -Ref: Precedence Parsing Overview-Footnote-192368 -Node: Rule Types107883 -Node: Ruleset Definition and Use109969 -Node: Token definition112657 -Node: Nud and Led Definition115647 -Node: Grammar Rule Definition118282 -Node: Format126334 -Node: Format Interface127181 -Node: Format Specification130001 -Node: Standard Formatted I/O164087 -Node: Standard Formatted Output165095 -Node: Standard Formatted Input175192 -Node: Programs and Arguments182214 -Node: Getopt182830 -Node: Command Line189908 -Node: Parameter lists193453 -Node: Getopt Parameter lists197629 -Node: Filenames201062 -Node: Batch205387 -Node: HTML213937 -Node: HTML Tables221689 -Node: HTTP and CGI229219 -Node: Parsing HTML234169 -Node: URI236951 -Node: Printing Scheme242831 -Node: Generic-Write243268 -Node: Object-To-String244827 -Node: Pretty-Print245438 -Node: Time and Date248854 -Node: Time Zone250220 -Node: Posix Time255673 -Node: Common-Lisp Time258625 -Node: Time Infrastructure260591 -Node: NCBI-DNA261802 -Node: Schmooz263727 -Node: Mathematical Packages268256 -Node: Bit-Twiddling269021 -Node: Modular Arithmetic281008 -Node: Prime Numbers284612 -Node: Random Numbers286794 -Node: Exact Random Numbers287776 -Node: Inexact Random Numbers290537 -Node: Fast Fourier Transform292983 -Node: Cyclic Checksum294111 -Node: Graphing303476 -Node: Character Plotting303805 -Node: PostScript Graphing309646 -Node: Column Ranges311628 -Node: Drawing the Graph313486 -Node: Graphics Context314712 -Node: Rectangles317024 -Node: Legending318945 -Node: Legacy Plotting322142 -Node: Example Graph323249 -Node: Solid Modeling327759 -Node: Color351601 -Node: Color Data-Type352612 -Ref: Color Data-Type-Footnote-1284376 -Node: Color Spaces358369 -Ref: Color Spaces-Footnote-1294375 -Node: Spectra370274 -Node: Color Difference Metrics382078 -Node: Color Conversions385366 -Node: Color Names389006 -Node: Daylight396689 -Node: Root Finding401853 -Node: Minimizing406185 -Ref: Minimizing-Footnote-1325873 -Node: Commutative Rings408394 -Node: Matrix Algebra420462 -Node: Database Packages422035 -Node: Relational Database422438 -Node: Using Databases423442 -Node: Table Operations430658 -Node: Single Row Operations432012 -Node: Match-Keys434523 -Node: Multi-Row Operations436752 -Node: Indexed Sequential Access Methods439440 -Node: Sequential Index Operations440524 -Node: Table Administration443107 -Node: Database Interpolation444263 -Node: Embedded Commands445497 -Node: Database Extension447183 -Node: Command Intrinsics449704 -Node: Define-tables Example451428 -Node: The *commands* Table453178 -Node: Command Service455558 -Node: Command Example457663 -Node: Database Macros462328 -Node: Within-database463389 -Node: Within-database Example467960 -Node: Database Browser469922 -Node: Relational Infrastructure471391 -Node: Base Table471795 -Node: The Base474637 -Node: Base Tables478020 -Node: Base Field Types479690 -Node: Composite Keys480635 -Node: Base Record Operations482873 -Node: Match Keys484812 -Node: Aggregate Base Operations485815 -Node: Base ISAM Operations487046 -Node: Catalog Representation488515 -Node: Relational Database Objects491286 -Node: Database Operations494070 -Node: Weight-Balanced Trees498159 -Node: Construction of Weight-Balanced Trees502153 -Node: Basic Operations on Weight-Balanced Trees505925 -Node: Advanced Operations on Weight-Balanced Trees509145 -Node: Indexing Operations on Weight-Balanced Trees515503 -Node: Other Packages519732 -Node: Data Structures520387 -Node: Arrays521297 -Node: Subarrays537830 -Node: Array Mapping540359 -Node: Association Lists543098 -Node: Byte545792 -Node: Byte/Number Conversions552214 -Node: MAT-File Format559755 -Node: Portable Image Files561303 -Node: Collections563302 -Node: Dynamic Data Type570079 -Node: Hash Tables571690 -Node: Object574797 -Node: Priority Queues584148 -Node: Queues585299 -Node: Records587191 -Node: Sorting and Searching591002 -Node: Common List Functions591803 -Node: List construction592364 -Node: Lists as sets594388 -Node: Lists as sequences601898 -Node: Destructive list operations607714 -Node: Non-List functions610724 -Node: Tree Operations612077 -Node: Chapter Ordering614118 -Node: Sorting616063 -Node: Topological Sort622251 -Node: Hashing624164 -Node: Space-Filling Curves625476 -Node: Hilbert Space-Filling Curve625936 -Node: Peano Space-Filling Curve634464 -Node: Sierpinski Curve635724 -Node: Soundex638404 -Node: String Search640187 -Node: Sequence Comparison643272 -Node: Procedures647125 -Node: Type Coercion647783 -Node: String-Case648432 -Node: String Ports650820 -Node: Line I/O651780 -Node: Multi-Processing654063 -Node: Metric Units655440 -Node: Standards Support664254 -Node: RnRS665166 -Node: With-File666775 -Node: Transcripts667248 -Node: Rev2 Procedures667791 -Node: Rev4 Optional Procedures670214 -Node: Multi-argument / and -670979 -Node: Multi-argument Apply671573 -Node: Rationalize672062 -Node: Promises673492 -Node: Dynamic-Wind674227 -Node: Eval675646 -Node: Values679319 -Node: SRFI680355 -Node: SRFI-1682144 -Node: SRFI-2693631 -Node: SRFI-8694050 -Node: SRFI-9694469 -Node: Session Support695156 -Node: Repl696162 -Node: Quick Print697691 -Node: Debug699333 -Node: Breakpoints700639 -Node: Trace703394 -Node: System Interface707940 -Node: Directories708727 -Node: Transactions710523 -Node: CVS716514 -Node: Extra-SLIB Packages718222 -Node: About SLIB720688 -Node: Installation721619 -Node: The SLIB script730918 -Node: Porting731819 -Ref: Porting-Footnote-1590851 -Node: Coding Guidelines733598 -Node: Copyrights736248 -Node: About this manual739997 -Node: Index740742 +Node: Module Analysis25530 +Node: Universal SLIB Procedures26635 +Node: Vicinity27250 +Node: Configuration31105 +Node: Input/Output34071 +Node: System37476 +Node: Miscellany40627 +Node: Scheme Syntax Extension Packages42714 +Node: Defmacro43747 +Node: R4RS Macros45723 +Node: Macro by Example46987 +Node: Macros That Work49885 +Node: Syntactic Closures55879 +Node: Syntax-Case Macros73407 +Node: Define-Structure77338 +Node: Define-Record-Type79393 +Node: Fluid-Let80880 +Node: Binding to multiple values81995 +Node: Guarded LET* special form82859 +Node: Guarded COND Clause83733 +Node: Yasos87706 +Node: Yasos terms88735 +Node: Yasos interface89907 +Node: Setters92129 +Node: Yasos examples94918 +Node: Textual Conversion Packages98004 +Node: Precedence Parsing98805 +Node: Precedence Parsing Overview99490 +Ref: Precedence Parsing Overview-Footnote-195777 +Node: Rule Types101126 +Node: Ruleset Definition and Use102581 +Node: Token definition104965 +Node: Nud and Led Definition107573 +Node: Grammar Rule Definition110034 +Node: Format117630 +Node: Format Interface117885 +Node: Format Specification119635 +Node: Standard Formatted I/O130580 +Node: Standard Formatted Output131168 +Node: Standard Formatted Input140626 +Node: Programs and Arguments147303 +Node: Getopt147811 +Node: Command Line154358 +Node: Parameter lists157556 +Node: Getopt Parameter lists161462 +Node: Filenames164703 +Node: Batch168613 +Node: HTML176437 +Node: HTML Tables182879 +Node: HTTP and CGI189411 +Node: Parsing HTML193960 +Node: URI196467 +Node: Printing Scheme201139 +Node: Generic-Write201458 +Node: Object-To-String202874 +Node: Pretty-Print203293 +Node: Time and Date206278 +Node: Time Zone207335 +Node: Posix Time212077 +Node: Common-Lisp Time214245 +Node: Time Infrastructure215871 +Node: NCBI-DNA216222 +Node: Schmooz217570 +Node: Mathematical Packages221806 +Node: Bit-Twiddling222539 +Node: Modular Arithmetic230610 +Node: Prime Numbers233491 +Node: Random Numbers235188 +Node: Exact Random Numbers236026 +Node: Inexact Random Numbers238298 +Node: Fast Fourier Transform240132 +Node: Cyclic Checksum241044 +Node: Graphing248670 +Node: Character Plotting248865 +Node: PostScript Graphing254377 +Node: Column Ranges256156 +Node: Drawing the Graph257635 +Node: Graphics Context258730 +Node: Rectangles260549 +Node: Legending261996 +Node: Legacy Plotting264225 +Node: Example Graph265438 +Node: Solid Modeling269805 +Node: Color288722 +Node: Color Data-Type289556 +Ref: Color Data-Type-Footnote-1288023 +Node: Color Spaces293941 +Ref: Color Spaces-Footnote-1298022 +Node: Spectra303858 +Node: Color Difference Metrics312621 +Node: Color Conversions315301 +Node: Color Names317443 +Node: Daylight324377 +Node: Root Finding329064 +Node: Minimizing333343 +Ref: Minimizing-Footnote-1329543 +Node: The Limit335464 +Node: Commutative Rings343411 +Node: Matrix Algebra355056 +Node: Database Packages356262 +Node: Relational Database356545 +Node: Using Databases357412 +Node: Table Operations363918 +Node: Single Row Operations365129 +Node: Match-Keys367372 +Node: Multi-Row Operations369451 +Node: Indexed Sequential Access Methods371842 +Node: Sequential Index Operations372850 +Node: Table Administration375206 +Node: Database Interpolation376073 +Node: Embedded Commands377175 +Node: Database Extension378749 +Node: Command Intrinsics380874 +Node: Define-tables Example382436 +Node: The *commands* Table384086 +Node: Command Service386364 +Node: Command Example388326 +Node: Database Macros392879 +Node: Within-database393764 +Node: Within-database Example396671 +Node: Database Browser398458 +Node: Relational Infrastructure399534 +Node: Base Table399838 +Node: The Base402346 +Node: Base Tables405464 +Node: Base Field Types406940 +Node: Composite Keys407723 +Node: Base Record Operations409777 +Node: Match Keys411505 +Node: Aggregate Base Operations412386 +Node: Base ISAM Operations413451 +Node: Catalog Representation414769 +Node: Relational Database Objects417438 +Node: Database Operations420082 +Node: Weight-Balanced Trees423791 +Node: Construction of Weight-Balanced Trees427677 +Node: Basic Operations on Weight-Balanced Trees431143 +Node: Advanced Operations on Weight-Balanced Trees434010 +Node: Indexing Operations on Weight-Balanced Trees440051 +Node: Other Packages443892 +Node: Data Structures444421 +Node: Arrays445291 +Node: Subarrays453978 +Node: Array Mapping456083 +Node: Array Interpolation458572 +Node: Association Lists461008 +Node: Byte463419 +Node: Byte/Number Conversions468737 +Node: MAT-File Format476441 +Node: Portable Image Files477778 +Node: Collections479461 +Node: Dynamic Data Type485715 +Node: Hash Tables487049 +Node: Object489698 +Node: Priority Queues498377 +Node: Queues499289 +Node: Records500600 +Node: Sorting and Searching504175 +Node: Common List Functions504868 +Node: List construction505325 +Node: Lists as sets507040 +Node: Lists as sequences513578 +Node: Destructive list operations518805 +Node: Non-List functions521483 +Node: Tree Operations522572 +Node: Chapter Ordering524265 +Node: Sorting525912 +Node: Topological Sort531753 +Node: Hashing533461 +Node: Space-Filling Curves534478 +Node: Hilbert Space-Filling Curve534782 +Node: Peano Space-Filling Curve538751 +Node: Sierpinski Curve540450 +Node: Soundex542914 +Node: String Search544512 +Node: Sequence Comparison547085 +Node: Procedures550215 +Node: Type Coercion550743 +Node: String-Case551175 +Node: String Ports553002 +Node: Line I/O553774 +Node: Multi-Processing555954 +Node: Metric Units557072 +Node: Standards Support565351 +Node: RnRS566147 +Node: With-File567370 +Node: Transcripts567646 +Node: Rev2 Procedures567980 +Node: Rev4 Optional Procedures569713 +Node: Multi-argument / and -570182 +Node: Multi-argument Apply570592 +Node: Rationalize570929 +Node: Promises572091 +Node: Dynamic-Wind572537 +Node: Eval573805 +Node: Values577150 +Node: SRFI577965 +Node: SRFI-1580198 +Node: Session Support584837 +Node: Repl585490 +Node: Quick Print586786 +Node: Debug588092 +Node: Breakpoints588999 +Node: Trace591041 +Node: System Interface594267 +Node: Directories594838 +Node: Transactions596331 +Node: CVS601842 +Node: Extra-SLIB Packages603009 +Node: About SLIB605318 +Node: Installation606070 +Node: The SLIB script611962 +Node: Porting612425 +Ref: Porting-Footnote-1599966 +Node: Coding Guidelines613989 +Node: Copyrights616403 +Node: About this manual619772 +Node: Index620323 End Tag Table @@ -1,23 +1,18 @@ -%define name slib -%define version 3a2 -%define release 1 - -Name: %{name} -Release: %{release} -Version: %{version} +Summary: platform independent library for scheme +Name: slib +Version: 3a3 +Release: 2 +Group: Development/Languages +BuildArch: noarch Packager: Aubrey Jaffer <agj@alum.mit.edu> Copyright: distributable, see individual files for copyright Vendor: Aubrey Jaffer <agj @ alum.mit.edu> -Group: Development/Tools Provides: slib -BuildArch: noarch -Summary: platform independent library for scheme Source: ftp://swiss.csail.mit.edu/pub/scm/slib%{version}.zip URL: http://swiss.csail.mit.edu/~jaffer/SLIB.html -BuildRoot: %{_tmppath}/%{name}%{version} -Prefix: /usr +BuildRoot: %{_tmppath}/%{name}-%{version}-root %description "SLIB" is a portable library for the programming language Scheme. @@ -27,73 +22,92 @@ packages for all Scheme implementations. Its catalog can be transparently extended to accomodate packages specific to a site, implementation, user, or directory. -%define __os_install_post /usr/lib/rpm/brp-compress - %prep -%setup -n slib -c -T -cd .. -unzip ${RPM_SOURCE_DIR}/slib%{version}.zip +%setup -q -n %{name} +for i in *; do + cp -f ${i} ${i}.orig + sed -s "s,/usr/local/lib,%{_datadir},g" < ${i} > ${i}.orig + sed -s "s,/usr/lib,%{_datadir},g" < ${i}.orig > ${i} + sed -s "s,/usr/local,/usr,g" < ${i}.orig > ${i} + rm -f ${i}.orig +done %build -gzip -f slib.info +gzip -9nf slib.info %install -mkdir -p ${RPM_BUILD_ROOT}%{prefix}/lib/slib -mkdir -p ${RPM_BUILD_ROOT}%{prefix}/bin -cp -r *.scm *.init *.xyz saturate.txt resenecolours.txt grapheps.ps Makefile ${RPM_BUILD_ROOT}%{prefix}/lib/slib -mkdir -p ${RPM_BUILD_ROOT}/usr/info -cp slib.info.gz ${RPM_BUILD_ROOT}/usr/info - -echo '#! /bin/sh' > ${RPM_BUILD_ROOT}%{prefix}/bin/slib -echo SCHEME_LIBRARY_PATH=%{prefix}/lib/slib/ >> ${RPM_BUILD_ROOT}%{prefix}/bin/slib -echo export SCHEME_LIBRARY_PATH >> ${RPM_BUILD_ROOT}%{prefix}/bin/slib -echo VERSION=%{version} >> ${RPM_BUILD_ROOT}%{prefix}/bin/slib -echo "S48_VICINITY=\"%{prefix}/lib/scheme48\";export S48_VICINITY" >> ${RPM_BUILD_ROOT}%{prefix}/bin/slib -cat slib.sh >> ${RPM_BUILD_ROOT}%{prefix}/bin/slib -chmod +x ${RPM_BUILD_ROOT}%{prefix}/bin/slib +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/slib +mkdir -p ${RPM_BUILD_ROOT}%{_bindir} +cp *.scm *.init *.xyz *.txt grapheps.ps Makefile ${RPM_BUILD_ROOT}%{_datadir}/slib +mkdir -p ${RPM_BUILD_ROOT}%{_infodir} +install -m644 slib.info.gz ${RPM_BUILD_ROOT}%{_infodir} + +echo '#! /bin/sh' > ${RPM_BUILD_ROOT}%{_bindir}/slib +echo SCHEME_LIBRARY_PATH=%{_datadir}/slib/ >> ${RPM_BUILD_ROOT}%{_bindir}/slib +echo export SCHEME_LIBRARY_PATH >> ${RPM_BUILD_ROOT}%{_bindir}/slib +echo VERSION=%{version} >> ${RPM_BUILD_ROOT}%{_bindir}/slib +echo "S48_VICINITY=\"%{_datadir}/scheme48\";export S48_VICINITY" >> ${RPM_BUILD_ROOT}%{_bindir}/slib +cat slib.sh >> ${RPM_BUILD_ROOT}%{_bindir}/slib +chmod +x ${RPM_BUILD_ROOT}%{_bindir}/slib %clean rm -rf ${RPM_BUILD_ROOT} %post -/sbin/install-info /usr/info/slib.info.gz /usr/info/dir +# /sbin/install-info ${RPM_BUILD_ROOT}%{_infodir}/slib.info.gz %{_infodir}/dir # This symlink is made as in the spec file of Robert J. Meier. if [ -L /usr/share/guile/slib ]; then rm /usr/share/guile/slib - ln -s %{prefix}/lib/slib /usr/share/guile/slib + ln -s %{_datadir}/slib /usr/share/guile/slib fi # Rebuild catalogs for as many implementations as possible. export PATH=$PATH:/usr/local/bin echo PATH=${PATH} -cd %{prefix}/lib/slib/ +cd %{_datadir}/slib/ make catalogs +# %postun +# if [ $1 = 0 ]; then +# /sbin/install-info --delete %{_infodir}/slib.info.gz %{_infodir}/dir +# fi + %preun -cd %{prefix}/lib/slib/ +cd %{_datadir}/slib/ rm -f srcdir.mk slib.image %files %defattr(-, root, root) -%{prefix}/bin/slib -%dir %{prefix}/lib/slib -%{prefix}/lib/slib/*.scm -%{prefix}/lib/slib/*.init -%{prefix}/lib/slib/cie1931.xyz -%{prefix}/lib/slib/cie1964.xyz -%{prefix}/lib/slib/saturate.txt -%{prefix}/lib/slib/resenecolours.txt -%{prefix}/lib/slib/grapheps.ps -/usr/info/slib.info.gz +%{_bindir}/slib +%dir %{_datadir}/slib +%{_datadir}/slib/*.scm +%{_datadir}/slib/*.init +%{_datadir}/slib/cie1931.xyz +%{_datadir}/slib/cie1964.xyz +%{_datadir}/slib/nbs-iscc.txt +%{_datadir}/slib/saturate.txt +%{_datadir}/slib/resenecolours.txt +%{_datadir}/slib/grapheps.ps +%{_infodir}/slib.info.gz # The Makefile is included as it is useful for building documentation. -%{prefix}/lib/slib/Makefile +%{_datadir}/slib/Makefile %doc ANNOUNCE README COPYING FAQ ChangeLog %changelog +* Sun Sep 25 2005 Aubrey Jaffer <agj@alum.mit.edu> +- Updated from RedHat version from Jindrich Novy. + +* Fri Jun 22 2005 Aubrey Jaffer <agj@alum.mit.edu> +- slib.spec (install): Make slib executable. + * Sat Jun 18 2004 Aubrey Jaffer <agj@alum.mit.edu> - Fixed for RPMbuild version 4.3.1 - Make slib executable. +* Thu Nov 03 2002 Aubrey Jaffer <agj@alum.mit.edu> +- slib.spec (%post): Improved catalog-building scripts. +- Make clrnamdb.scm. + * Wed Mar 14 2001 Radey Shouman <shouman@ne.mediaone.net> - Adapted from the spec file of R. J. Meier. @@ -412,11 +412,11 @@ installation to installation, SLIB builds a separate catalog for each implementation it is used with. @noindent -The definition of @code{*SLIB-VERSION*} in SLIB file +The definition of @code{*slib-version*} in SLIB file @file{require.scm} is checked against the catalog association of -@code{*SLIB-VERSION*} to ascertain when versions have changed. It is +@code{*slib-version*} to ascertain when versions have changed. It is a reasonable practice to change the definition of -@code{*SLIB-VERSION*} whenever the library is changed. If multiple +@code{*slib-version*} whenever the library is changed. If multiple implementations of Scheme use SLIB, remember that recompiling one @file{slibcat} will update only that implementation's catalog. @@ -1183,7 +1183,11 @@ Returns the last pair in the list @var{l}. Example: Syntax extensions (macros) included with SLIB. * Define-Structure:: 'structure +* Define-Record-Type:: 'define-record-type, 'srfi-9 * Fluid-Let:: 'fluid-let +* Binding to multiple values:: 'receive, 'srfi-8 +* Guarded LET* special form:: 'and-let*, 'srfi-2 +* Guarded COND Clause:: 'guarded-cond-clause, 'srfi-61 * Yasos:: 'yasos, 'oop, 'collect @end menu @@ -2132,7 +2136,7 @@ Send bug reports, comments, suggestions, and questions to Kent Dybvig -@node Define-Structure, Fluid-Let, Syntax-Case Macros, Scheme Syntax Extension Packages +@node Define-Structure, Define-Record-Type, Syntax-Case Macros, Scheme Syntax Extension Packages @section Define-Structure @code{(require 'structure)} @@ -2195,8 +2199,30 @@ red @end deffn +@node Define-Record-Type, Fluid-Let, Define-Structure, Scheme Syntax Extension Packages +@section Define-Record-Type -@node Fluid-Let, Yasos, Define-Structure, Scheme Syntax Extension Packages +@code{(require 'define-record-type)} or @code{(require 'srfi-9)} +@ftindex srfi-9 +@ftindex define-record-type + +@url{http://srfi.schemers.org/srfi-9/srfi-9.html} + +@defspec define-record-type <type-name> (<constructor-name> <field-tag> ...) <predicate-name> <field-spec> ... + +Where +@lisp +<field-spec> @equiv{} (<field-tag> <accessor-name>) + @equiv{} (<field-tag> <accessor-name> <modifier-name>) + +@end lisp + +@code{define-record-type} is a syntax wrapper for the SLIB +@code{record} module. +@end defspec + + +@node Fluid-Let, Binding to multiple values, Define-Record-Type, Scheme Syntax Extension Packages @section Fluid-Let @code{(require 'fluid-let)} @@ -2224,7 +2250,107 @@ by the rules of lexical scoping) of its corresponding @var{variable}. -@node Yasos, , Fluid-Let, Scheme Syntax Extension Packages +@node Binding to multiple values, Guarded LET* special form, Fluid-Let, Scheme Syntax Extension Packages +@section Binding to multiple values + +@code{(require 'receive)} or @code{(require 'srfi-8)} +@ftindex srfi-8 +@ftindex receive + +@defspec receive formals expression body @dots{} + +@url{http://srfi.schemers.org/srfi-8/srfi-8.html} +@end defspec + + + +@node Guarded LET* special form, Guarded COND Clause, Binding to multiple values, Scheme Syntax Extension Packages +@section Guarded LET* special form + +@code{(require 'and-let*)} or @code{(require 'srfi-2)} +@ftindex srfi-2 +@ftindex and-let* + +@defmac and-let* claws body @dots{} + +@url{http://srfi.schemers.org/srfi-2/srfi-2.html} +@end defmac + + +@node Guarded COND Clause, Yasos, Guarded LET* special form, Scheme Syntax Extension Packages +@section Guarded COND Clause + +@code{(require 'guarded-cond-clause)} or @code{(require 'srfi-61)} +@ftindex srfi-61 +@ftindex guarded-cond-clause + +@url{http://srfi.schemers.org/srfi-61/srfi-61.html} + +@deffn {library syntax} cond <clause1> <clause2> @dots{} + +@emph{Syntax:} +Each @r{<clause>} should be of the form + +@format +@t{(@r{<test>} @r{<expression1>} @dots{}) +} +@end format + +where @r{<test>} is any expression. Alternatively, a @r{<clause>} may be +of the form + +@format +@t{(@r{<test>} => @r{<expression>}) +} +@end format + +The @r{<clause>} production in the formal syntax of Scheme as +written by R5RS in section 7.1.3 is extended with a new option: +@cindex @w{=>} + +@format +@t{@r{<clause>} => (@r{<generator>} @r{<guard>} => @r{<receiver>}) +} +@end format + +where @r{<generator>}, @r{<guard>}, & @r{<receiver>} are all +@r{<expression>}s. + +@quotation +Clauses of this form have the following semantics: @r{<generator>} is +evaluated. It may return arbitrarily many values. @r{<Guard>} is +applied to an argument list containing the values in order that +@r{<generator>} returned. If @r{<guard>} returns a true value for +that argument list, @r{<receiver>} is applied with an equivalent +argument list. If @r{<guard>} returns a false value, however, the +clause is abandoned and the next one is tried. +@end quotation + +The last @r{<clause>} may be +an ``else clause,'' which has the form + +@format +@t{(else @r{<expression1>} @r{<expression2>} @dots{})@r{.} +} +@end format +@end deffn + +@noindent +This @code{port->char-list} procedure accepts an input port and +returns a list of all the characters it produces until the end. + +@example +(define (port->char-list port) + (cond ((read-char port) char? + => (lambda (c) (cons c (port->char-list port)))) + (else '()))) + +(call-with-input-string "foo" port->char-list) ==> (#\f #\o #\o) +@end example + + + +@node Yasos, , Guarded COND Clause, Scheme Syntax Extension Packages @section Yasos @c Much of the documentation in this section was written by Dave Love @@ -2516,6 +2642,8 @@ value is unspecified. @result{} 2 @end lisp + + @node Textual Conversion Packages, Mathematical Packages, Scheme Syntax Extension Packages, Top @chapter Textual Conversion Packages @@ -4698,6 +4826,7 @@ match the arguments to @code{encode-universal-time}. * Color:: * Root Finding:: 'root * Minimizing:: 'minimize +* The Limit:: 'limit * Commutative Rings:: 'commutative-ring * Matrix Algebra:: 'determinant @end menu @@ -6183,6 +6312,11 @@ Resene Paints Ltd. @code{(require 'root)} @ftindex root +@defun integer-sqrt y +Given a non-negative integer @var{y}, returns the largest integer +whose square is less than or equal to @var{y}. +@end defun + @defun newton:find-integer-root f df/dx x0 Given integer valued procedure @var{f}, its derivative (with respect to its argument) @var{df/dx}, and initial integer value @var{x0} for which @@ -6203,11 +6337,6 @@ To find the closest integer to a given integer's square root: @end example @end defun -@defun integer-sqrt y -Given a non-negative integer @var{y}, returns the rounded square-root of -@var{y}. -@end defun - @defun newton:find-root f df/dx x0 prec Given real valued procedures @var{f}, @var{df/dx} of one (real) argument, initial real value @var{x0} for which @var{df/dx}(@var{x0}) is @@ -6287,7 +6416,7 @@ iterations performed so far. @var{prec} should return non-false if the iteration should be stopped. @end defun -@node Minimizing, Commutative Rings, Root Finding, Mathematical Packages +@node Minimizing, The Limit, Root Finding, Mathematical Packages @section Minimizing @code{(require 'minimize)} @@ -6296,7 +6425,13 @@ if the iteration should be stopped. @include minimize.txi -@node Commutative Rings, Matrix Algebra, Minimizing, Mathematical Packages +@node The Limit, Commutative Rings, Minimizing, Mathematical Packages +@section The Limit + +@include limit.texi + + +@node Commutative Rings, Matrix Algebra, The Limit, Mathematical Packages @section Commutative Rings Scheme provides a consistent and capable set of numeric functions. @@ -8835,6 +8970,7 @@ operation is equivalent to * Arrays:: 'array * Subarrays:: 'subarray * Array Mapping:: 'array-for-each +* Array Interpolation:: 'array-interpolate * Association Lists:: 'alist * Byte:: 'byte * Byte/Number Conversions:: 'byte-number @@ -8864,13 +9000,19 @@ operation is equivalent to @include subarray.txi -@node Array Mapping, Association Lists, Subarrays, Data Structures +@node Array Mapping, Array Interpolation, Subarrays, Data Structures @subsection Array Mapping @include arraymap.txi -@node Association Lists, Byte, Array Mapping, Data Structures +@node Array Interpolation, Association Lists, Array Mapping, Data Structures +@subsection Array Interpolation + +@include linterp.txi + + +@node Association Lists, Byte, Array Interpolation, Data Structures @subsection Association Lists @include alist.txi @@ -11234,48 +11376,24 @@ unspecified. @menu * SRFI-1:: list-processing -* SRFI-2:: guarded LET* special form -* SRFI-8:: Binding to multiple values -* SRFI-9:: Defining Record Types @end menu -SRFI-47 is the same as @ref{Arrays}. +@itemize @bullet +@item SRFI-2 @ref{Guarded LET* special form} +@item SRFI-8 @ref{Binding to multiple values} +@item SRFI-9 @ref{Define-Record-Type} +@item SRFI-47 @ref{Arrays} +@item SRFI-59 @ref{Vicinity} +@item SRFI-63 @ref{Arrays} +@item SRFI-60 @ref{Bit-Twiddling} +@item SRFI-61 @ref{Guarded COND Clause} +@end itemize -@node SRFI-1, SRFI-2, SRFI, SRFI +@node SRFI-1, , SRFI, SRFI @subsubsection SRFI-1 @include srfi-1.txi -@node SRFI-2, SRFI-8, SRFI-1, SRFI -@subsubsection SRFI-2 - -@include srfi-2.txi - -@node SRFI-8, SRFI-9, SRFI-2, SRFI -@subsubsection SRFI-8 - -@include srfi-8.txi - -@node SRFI-9, , SRFI-8, SRFI -@subsubsection SRFI-9 - -@code{(require 'srfi-9)} -@ftindex srfi-9 - -@url{http://srfi.schemers.org/srfi-9/srfi-9.html} - -@defspec define-record-type <type-name> (<constructor-name> <field-tag> ...) <predicate-name> <field spec> ... - -Where -@lisp -<field-spec> @equiv{} (<field-tag> <accessor-name>) - @equiv{} (<field-tag> <accessor-name> <modifier-name>) - -@end lisp - -@code{define-record-type} is a syntax wrapper for the SLIB -@code{record} module. -@end defspec @node Session Support, System Interface, Standards Support, Other Packages diff --git a/srfi-2.txi b/srfi-2.txi deleted file mode 100644 index 5b43293..0000000 --- a/srfi-2.txi +++ /dev/null @@ -1,9 +0,0 @@ -@code{(require 'srfi-2)} -@ftindex srfi-2 - - -@defmac and-let* claws body @dots{} - -@url{http://srfi.schemers.org/srfi-2/srfi-2.html} -@end defmac - diff --git a/srfi-61.scm b/srfi-61.scm new file mode 100644 index 0000000..015320b --- /dev/null +++ b/srfi-61.scm @@ -0,0 +1,49 @@ +;;; "srfi-61.scm" -- A more general cond clause -*- Scheme -*- + +;;; Public domain +;;; Author: Taylor Campbell +;;; URL:http://srfi.schemers.org/srfi-61/srfi-61.html + +;@ +(define-syntax cond + (syntax-rules (=> else) + + ((cond (else else1 else2 ...)) + ;; The (IF #T (BEGIN ...)) wrapper ensures that there may be no + ;; internal definitions in the body of the clause. R5RS mandates + ;; this in text (by referring to each subform of the clauses as + ;; <expression>) but not in its reference implementation of COND, + ;; which just expands to (BEGIN ...) with no (IF #T ...) wrapper. + (if #t (begin else1 else2 ...))) + + ((cond (test => receiver) more-clause ...) + (let ((T test)) + (cond/maybe-more T + (receiver T) + more-clause ...))) + + ((cond (generator guard => receiver) more-clause ...) + (call-with-values (lambda () generator) + (lambda T + (cond/maybe-more (apply guard T) + (apply receiver T) + more-clause ...)))) + + ((cond (test) more-clause ...) + (let ((T test)) + (cond/maybe-more T T more-clause ...))) + + ((cond (test body1 body2 ...) more-clause ...) + (cond/maybe-more test + (begin body1 body2 ...) + more-clause ...)))) + +(define-syntax cond/maybe-more + (syntax-rules () + ((cond/maybe-more test consequent) + (if test + consequent)) + ((cond/maybe-more test consequent clause ...) + (if test + consequent + (cond clause ...))))) diff --git a/srfi-8.txi b/srfi-8.txi deleted file mode 100644 index b2d8618..0000000 --- a/srfi-8.txi +++ /dev/null @@ -1,9 +0,0 @@ -@code{(require 'srfi-8)} -@ftindex srfi-8 - - -@defspec receive formals expression body @dots{} - -@url{http://srfi.schemers.org/srfi-8/srfi-8.html} -@end defspec - @@ -22,15 +22,6 @@ ;; ;;@noindent Implements @dfn{Scheme Request For Implementation} (SRFI) as ;;described at @url{http://srfi.schemers.org/} -;; -;;@noindent The Copyright terms of each SRFI states: -;;@quotation -;;"However, this document itself may not be modified in any way, ..." -;;@end quotation -;; -;;@noindent Therefore, the specification of SRFI constructs must not be -;;quoted without including the complete SRFI document containing -;;discussion and a sample implementation program. ;;@args <clause1> <clause2> @dots{} ;; @@ -5,15 +5,6 @@ @cindex Scheme Request For Implementation described at @url{http://srfi.schemers.org/} -@noindent The Copyright terms of each SRFI states: -@quotation -"However, this document itself may not be modified in any way, ..." -@end quotation - -@noindent Therefore, the specification of SRFI constructs must not be -quoted without including the complete SRFI document containing -discussion and a sample implementation program. - @defmac cond-expand <clause1> <clause2> @dots{} @@ -10,7 +10,7 @@ ;;; This is provided with ABSOLUTELY NO GUARANTEE. (herald t3) -(define (software-type) 'UNIX) +(define (software-type) 'unix) (define (scheme-implementation-type) 'T) @@ -52,7 +52,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -60,12 +60,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -89,7 +89,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -99,10 +99,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ diff --git a/top-refs.scm b/top-refs.scm index 3647dc4..0c88ba5 100644 --- a/top-refs.scm +++ b/top-refs.scm @@ -163,11 +163,15 @@ ((case) (top-refs:expression (cadr exp)) (for-each (lambda (exp) - (for-each top-refs:expression (cdr exp))) + (if (list? exp) + (for-each top-refs:expression (cdr exp)) + (top-refs:expression exp))) (cddr exp))) ((cond) (for-each (lambda (exp) - (for-each top-refs:expression exp)) + (if (list? exp) + (for-each top-refs:expression exp) + (top-refs:expression exp))) (cdr exp))) ((let) (cond ((symbol? (cadr exp)) diff --git a/transact.scm b/transact.scm index 83b37a7..3533aa3 100644 --- a/transact.scm +++ b/transact.scm @@ -148,7 +148,7 @@ (define (file-lock:certificate path) (or (case (software-type) - ((UNIX COHERENT PLAN9) + ((unix coherent plan9) (emacs-lock:certificate (emacs-lock:path path))) (else #f)) (word-lock:certificate (word-lock:path path)))) @@ -225,7 +225,7 @@ (not (file-lock:certificate path)) (let ((wl (word:lock! path email))) (case (software-type) - ((UNIX COHERENT PLAN9) + ((unix coherent plan9) ;; file-system may not support symbolic links. (or (and (provided? 'current-time) (emacs:lock! path email)) wl)) @@ -252,7 +252,7 @@ (let ((e-path (emacs-lock:path path))) (define e-cert (emacs-lock:certificate e-path)) (case (software-type) - ((UNIX COHERENT PLAN9) + ((unix coherent plan9) (cond ((not (equal? e-cert certificate)) (slib:warn 'file-unlock! e-path 'mismatch certificate) #f) @@ -354,8 +354,8 @@ (+ 2 (length args)) 'args)))) (define backup-style (if (null? args) #f (car args))) (define move (case (software-type) - ((UNIX COHERENT PLAN9) "mv -f") - ((MS-DOS WINDOWS OS/2 ATARIST) "MOVE /Y") + ((unix coherent plan9) "mv -f") + ((ms-dos windows os/2 atarist) "MOVE /Y") (else (slib:error (software-type) 'move?)))) (define (move? tmpfn path) (eqv? 0 (system (sprintf #f "%s %#a %#a" move tmpfn path)))) @@ -471,13 +471,13 @@ (define hostname (getenv "HOSTNAME")) ;with domain (cond ((and user hostname) (string-append user "@" hostname)) (else (case (software-type) - ;;((AMIGA) ) - ;;((MACOS THINKC) ) - ((MS-DOS WINDOWS OS/2 ATARIST) + ;;((amiga) ) + ;;((macos thinkc) ) + ((ms-dos windows os/2 atarist) (windows:user-email-address user hostname)) - ;;((NOSVE) ) - ;;((VMS) ) - ((UNIX COHERENT PLAN9) + ;;((nosve) ) + ;;((vms) ) + ((unix coherent plan9) (call-with-tmpnam (lambda (tmp) (if (not user) (set! user (system->line "whoami" tmp))) diff --git a/umbscheme.init b/umbscheme.init index 9794d80..f531605 100644 --- a/umbscheme.init +++ b/umbscheme.init @@ -9,7 +9,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -30,9 +30,9 @@ ;;; implementation reside. (define (implementation-vicinity) (case (software-type) - ((UNIX) "/usr/lib/umb-scheme/") - ((VMS) "scheme$src:") - ((MS-DOS) "C:\\scheme\\"))) + ((unix) "/usr/lib/umb-scheme/") + ((vms) "scheme$src:") + ((ms-dos) "C:\\scheme\\"))) ;;; (library-vicinity) should be defined to be the pathname of the ;;; directory where files of Scheme library functions reside. @@ -44,9 +44,9 @@ ;; Use this path if your scheme does not support GETENV ;; or if SCHEME_LIBRARY_PATH is not set. (case (software-type) - ((UNIX) "/usr/lib/umb-scheme/slib/") - ((VMS) "lib$scheme:") - ((MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/lib/umb-scheme/slib/") + ((vms) "lib$scheme:") + ((ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -59,7 +59,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -67,12 +67,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -91,7 +91,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -101,10 +101,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -219,7 +219,7 @@ ;;(define (file-exists? f) #f) (define file-exists? (case (software-type) - ((UNIX) + ((unix) (lambda (f) (zero? (system (string-append "test -r " f))))) (else @@ -229,7 +229,7 @@ ;;(define (delete-file f) #f) (define delete-file (case (software-type) - ((UNIX) + ((unix) (lambda (f) (zero? (system (string-append "rm " f))))) (else @@ -344,7 +344,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) diff --git a/version.txi b/version.txi index 5d88497..1c1c2d8 100644 --- a/version.txi +++ b/version.txi @@ -1,2 +1,2 @@ -@set SLIBVERSION 3a2 -@set SLIBDATE June 2005 +@set SLIBVERSION 3a3 +@set SLIBDATE February 2006 @@ -36,7 +36,7 @@ ;;; (software-type) should be set to the generic operating system type. ;;; UNIX, VMS, MACOS, AMIGA and MS-DOS are supported. -(define (software-type) 'UNIX) +(define (software-type) 'unix) ;;; (scheme-implementation-type) should return the name of the scheme ;;; implementation loading this file. @@ -57,9 +57,9 @@ ;;; implementation reside. (define (implementation-vicinity) (case (software-type) - ((UNIX) "/usr/local/src/scheme/") - ((VMS) "scheme$src:") - ((MS-DOS) "C:\\scheme\\"))) + ((unix) "/usr/local/src/scheme/") + ((vms) "scheme$src:") + ((ms-dos) "C:\\scheme\\"))) ;;; (library-vicinity) should be defined to be the pathname of the ;;; directory where files of Scheme library functions reside. @@ -68,9 +68,9 @@ (or (getenv "SCHEME_LIBRARY_PATH") ;; Uses this path if SCHEME_LIBRARY_PATH is not set. (case (software-type) - ((UNIX) "/usr/local/lib/slib/") - ((VMS) "lib$scheme:") - ((MS-DOS) "C:\\SLIB\\") + ((unix) "/usr/local/lib/slib/") + ((vms) "lib$scheme:") + ((ms-dos) "C:\\SLIB\\") (else ""))))) (lambda () library-path))) @@ -81,7 +81,7 @@ (let ((home (getenv "HOME"))) (and home (case (software-type) - ((UNIX COHERENT MS-DOS) ;V7 unix has a / on HOME + ((unix coherent ms-dos) ;V7 unix has a / on HOME (if (eqv? #\/ (string-ref home (+ -1 (string-length home)))) home (string-append home "/"))) @@ -91,7 +91,7 @@ ;@ (define (user-vicinity) (case (software-type) - ((VMS) "[.]") + ((vms) "[.]") (else ""))) (define *load-pathname* #f) @@ -99,12 +99,12 @@ (define vicinity:suffix? (let ((suffi (case (software-type) - ((AMIGA) '(#\: #\/)) - ((MACOS THINKC) '(#\:)) - ((MS-DOS WINDOWS ATARIST OS/2) '(#\\ #\/)) - ((NOSVE) '(#\: #\.)) - ((UNIX COHERENT PLAN9) '(#\/)) - ((VMS) '(#\: #\])) + ((amiga) '(#\: #\/)) + ((macos thinkc) '(#\:)) + ((ms-dos windows atarist os/2) '(#\\ #\/)) + ((nosve) '(#\: #\.)) + ((unix coherent plan9) '(#\/)) + ((vms) '(#\: #\])) (else (slib:warn "require.scm" 'unknown 'software-type (software-type)) "/")))) @@ -123,7 +123,7 @@ ;@ (define sub-vicinity (case (software-type) - ((VMS) (lambda + ((vms) (lambda (vic name) (let ((l (string-length vic))) (if (or (zero? (string-length vic)) @@ -133,10 +133,10 @@ "." name "]"))))) (else (let ((*vicinity-suffix* (case (software-type) - ((NOSVE) ".") - ((MACOS THINKC) ":") - ((MS-DOS WINDOWS ATARIST OS/2) "\\") - ((UNIX COHERENT PLAN9 AMIGA) "/")))) + ((nosve) ".") + ((macos thinkc) ":") + ((ms-dos windows atarist os/2) "\\") + ((unix coherent plan9 amiga) "/")))) (lambda (vic name) (string-append vic name *vicinity-suffix*)))))) ;@ @@ -463,7 +463,7 @@ ;;; Here for backward compatability (define scheme-file-suffix (let ((suffix (case (software-type) - ((NOSVE) "_scm") + ((nosve) "_scm") (else ".scm")))) (lambda () suffix))) |