diff options
-rw-r--r-- | ChangeLog | 84 | ||||
-rw-r--r-- | DrScheme.init | 30 | ||||
-rw-r--r-- | Makefile | 20 | ||||
-rw-r--r-- | README | 2 | ||||
-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-- | debian/changelog | 7 | ||||
-rw-r--r-- | dirs.scm | 16 | ||||
-rw-r--r-- | elk.init | 42 | ||||
-rw-r--r-- | gambit.init | 58 | ||||
-rw-r--r-- | guile.init | 97 | ||||
-rw-r--r-- | http-cgi.scm | 4 | ||||
-rw-r--r-- | jscheme.init | 39 | ||||
-rw-r--r-- | limit.scm | 129 | ||||
-rw-r--r-- | limit.texi | 101 | ||||
-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 | 49 | ||||
-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 | 28 | ||||
-rw-r--r-- | scsh.init | 30 | ||||
-rw-r--r-- | slib.spec | 106 | ||||
-rw-r--r-- | slib.texi | 218 | ||||
-rw-r--r-- | srfi-61.scm | 49 | ||||
-rw-r--r-- | srfi.scm | 9 | ||||
-rw-r--r-- | srfi.txi | 9 | ||||
-rw-r--r-- | t3.init | 26 | ||||
-rw-r--r-- | transact.scm | 22 | ||||
-rw-r--r-- | umbscheme.init | 44 | ||||
-rw-r--r-- | vscm.init | 42 |
51 files changed, 1318 insertions, 666 deletions
@@ -1,3 +1,87 @@ +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*)))))) ;@ @@ -17,7 +17,7 @@ srcdir.mk: .. Makefile include srcdir.mk VERSION = 3a2 -RELEASE = 1 +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) \ @@ -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/debian/changelog b/debian/changelog index 9bbed5f..f76c88a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +slib (3a2-3) unstable; urgency=low + + * Brought all source files up-to-date with upstream CVS. + Repeat changes from version 3a2-1 in Makefile. + + -- Thomas Bushnell, BSG <tb@debian.org> Sun, 4 Dec 2005 20:03:34 -0800 + slib (3a2-2) unstable; urgency=low * Conflict with libguile9 <= 1:1.4-26 and guile-1.6-libs <= 1.6.7-1.1. @@ -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))) @@ -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,31 @@ ;;; 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 <pathname>) + (load (string-append <pathname> (scheme-file-suffix)))) (define slib:load-source slib:load) @@ -524,9 +519,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..abdb3fa 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")) 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..0a3a64c --- /dev/null +++ b/limit.texi @@ -0,0 +1,101 @@ +@settitle The limit procedure + +@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..8c1e1a9 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) @@ -95,15 +98,47 @@ ;;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..8ea6bb5 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* "3a2") ;;;; 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..2b14f30 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 @@ -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,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: 3a2 +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-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 ...))))) @@ -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/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))) @@ -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))) |