This commit was manufactured by cvs2git to create branch 'countdown'.

Sprout from master 1997-10-15 16:43:43 UTC Robby Findler <robby@racket-lang.org> 'Initial revision'
Cherrypick from master 1997-10-15 16:52:54 UTC Robby Findler <robby@racket-lang.org> 'Initial revision':
    collects/countdwn/README
Delete:
    collects/backward/sparamr.ss
    collects/backward/sparams.ss
    collects/cogen/ariesr.ss
    collects/cogen/ariess.ss
    collects/drscheme-jr/drscheme-jr.el
    collects/drscheme-jr/drscheme-jr.elc
    collects/drscheme-jr/drscheme-jr.ss
    collects/drscheme-jr/openbugs
    collects/drscheme/app.ss
    collects/drscheme/basis.ss
    collects/drscheme/cunit.ss
    collects/drscheme/donkstub.ss
    collects/drscheme/drsig.ss
    collects/drscheme/edit.ss
    collects/drscheme/export.ss
    collects/drscheme/face.ss
    collects/drscheme/frame.ss
    collects/drscheme/history
    collects/drscheme/icons.ss
    collects/drscheme/info.ss
    collects/drscheme/init.ss
    collects/drscheme/intrface.ss
    collects/drscheme/language.ss
    collects/drscheme/link.ss
    collects/drscheme/main.ss
    collects/drscheme/openbugs
    collects/drscheme/params.ss
    collects/drscheme/phooks.ss
    collects/drscheme/prefs.ss
    collects/drscheme/prog.ss
    collects/drscheme/rep.ss
    collects/drscheme/setup.ss
    collects/drscheme/sig.ss
    collects/drscheme/snip.ss
    collects/drscheme/spidstub.ss
    collects/drscheme/tool.ss
    collects/drscheme/tools/analysis/unit.ss
    collects/drscheme/tools/debug/unit.ss
    collects/drscheme/tools/syncheck/unit.ss
    collects/drscheme/toy.ss
    collects/drscheme/unit.ss
    collects/drscheme/zlink.ss
    collects/drscheme/zodiac.ss
    collects/graphics/TREADME
    collects/graphics/graphic.ss
    collects/graphics/graphicr.ss
    collects/graphics/graphics.ss
    collects/graphics/graphicu.ss
    collects/graphics/turex.ss
    collects/graphics/turtle.ss
    collects/graphics/turtler.ss
    collects/graphics/turtles.ss
    collects/graphics/turtlmr.ss
    collects/gusrspce/gusrspcr.ss
    collects/gusrspce/gusrspcs.ss
    collects/hierarchy/classr.ss
    collects/hierarchy/hierr.ss
    collects/hierarchy/m3r.ss
    collects/hierarchy/unitr.ss
    collects/hierlist/doc.txt
    collects/hierlist/hierlist.ss
    collects/hierlist/hierlistr.ss
    collects/hierlist/hierlists.ss
    collects/mred/autoload.ss
    collects/mred/autosave.ss
    collects/mred/canvas.ss
    collects/mred/connect.ss
    collects/mred/console.ss
    collects/mred/constant.ss
    collects/mred/containr.ss
    collects/mred/contfram.ss
    collects/mred/contkids.ss
    collects/mred/contpanl.ss
    collects/mred/cparens.ss
    collects/mred/cppmode.ss
    collects/mred/edframe.ss
    collects/mred/edit.ss
    collects/mred/exit.ss
    collects/mred/exn.ss
    collects/mred/fileutil.ss
    collects/mred/finder.ss
    collects/mred/findstr.ss
    collects/mred/frame.ss
    collects/mred/graph.ss
    collects/mred/group.ss
    collects/mred/guiutils.ss
    collects/mred/html.ss
    collects/mred/hyper.ss
    collects/mred/hypersig.ss
    collects/mred/hyprdial.ss
    collects/mred/hypredit.ss
    collects/mred/hyprfram.ss
    collects/mred/icon.ss
    collects/mred/keys.ss
    collects/mred/link.ss
    collects/mred/mcache.ss
    collects/mred/menu.ss
    collects/mred/mode.ss
    collects/mred/panel.ss
    collects/mred/paren.ss
    collects/mred/prefs.ss
    collects/mred/project.ss
    collects/mred/sig.ss
    collects/mred/sparen.ss
    collects/mred/ssmode.ss
    collects/mred/stdrs.ss
    collects/mred/stlink.ss
    collects/mred/stprims.ss
    collects/mred/strun.ss
    collects/mred/stsigs.ss
    collects/mred/testable.ss
    collects/mred/url.ss
    collects/mred/version.ss
    collects/mred/wxr.ss
    collects/mred/wxs.ss
    collects/mzlib/awk.ss
    collects/mzlib/awkc.ss
    collects/mzlib/compat.ss
    collects/mzlib/compatc.ss
    collects/mzlib/compatr.ss
    collects/mzlib/compats.ss
    collects/mzlib/compatu.ss
    collects/mzlib/compile.ss
    collects/mzlib/compilec.ss
    collects/mzlib/compiler.ss
    collects/mzlib/compiles.ss
    collects/mzlib/compileu.ss
    collects/mzlib/constan.ss
    collects/mzlib/constanc.ss
    collects/mzlib/constant.ss
    collects/mzlib/core.ss
    collects/mzlib/corec.ss
    collects/mzlib/corer.ss
    collects/mzlib/cores.ss
    collects/mzlib/coreu.ss
    collects/mzlib/date.ss
    collects/mzlib/datec.ss
    collects/mzlib/dater.ss
    collects/mzlib/dates.ss
    collects/mzlib/dateu.ss
    collects/mzlib/defstru.ss
    collects/mzlib/defstruc.ss
    collects/mzlib/file.ss
    collects/mzlib/filec.ss
    collects/mzlib/filer.ss
    collects/mzlib/files.ss
    collects/mzlib/fileu.ss
    collects/mzlib/functio.ss
    collects/mzlib/functioc.ss
    collects/mzlib/function.ss
    collects/mzlib/functior.ss
    collects/mzlib/functios.ss
    collects/mzlib/functiou.ss
    collects/mzlib/inflate.ss
    collects/mzlib/inflatec.ss
    collects/mzlib/inflater.ss
    collects/mzlib/inflates.ss
    collects/mzlib/inflateu.ss
    collects/mzlib/letplsrc.ss
    collects/mzlib/letplus.ss
    collects/mzlib/macro.ss
    collects/mzlib/macroc.ss
    collects/mzlib/macrox.ss
    collects/mzlib/match.ss
    collects/mzlib/matchc.ss
    collects/mzlib/mzlib.ss
    collects/mzlib/mzlibc.ss
    collects/mzlib/mzlibr.ss
    collects/mzlib/mzlibs.ss
    collects/mzlib/mzlibu.ss
    collects/mzlib/pconver.ss
    collects/mzlib/pconverc.ss
    collects/mzlib/pconverr.ss
    collects/mzlib/pconvers.ss
    collects/mzlib/pconvert.ss
    collects/mzlib/pconveru.ss
    collects/mzlib/pretty.ss
    collects/mzlib/prettyc.ss
    collects/mzlib/prettyr.ss
    collects/mzlib/prettys.ss
    collects/mzlib/prettyu.ss
    collects/mzlib/refer.ss
    collects/mzlib/referc.ss
    collects/mzlib/referf.ss
    collects/mzlib/sfunctor.ss
    collects/mzlib/shared.ss
    collects/mzlib/sharedc.ss
    collects/mzlib/spidey.ss
    collects/mzlib/spideyc.ss
    collects/mzlib/string.ss
    collects/mzlib/stringc.ss
    collects/mzlib/stringr.ss
    collects/mzlib/strings.ss
    collects/mzlib/stringu.ss
    collects/mzlib/synrule.ss
    collects/mzlib/synrulec.ss
    collects/mzlib/thread.ss
    collects/mzlib/threadc.ss
    collects/mzlib/threadr.ss
    collects/mzlib/threads.ss
    collects/mzlib/threadu.ss
    collects/mzlib/trace.ss
    collects/mzlib/tracec.ss
    collects/mzlib/trigger.ss
    collects/mzlib/triggerc.ss
    collects/mzlib/triggerr.ss
    collects/mzlib/triggers.ss
    collects/mzlib/triggeru.ss
    collects/mzlib/unitsig.ss
    collects/mzlib/unitsigc.ss
    collects/mzlib/zmath.ss
    collects/mzlib/zmathc.ss
    collects/mzlib/zmathr.ss
    collects/mzlib/zmaths.ss
    collects/mzlib/zmathu.ss
    collects/net/cgi.ss
    collects/net/cgir.ss
    collects/net/cgis.ss
    collects/net/cgiu.ss
    collects/net/nntp.sd
    collects/net/nntp.ss
    collects/net/nntpr.ss
    collects/net/nntps.ss
    collects/net/nntpu.ss
    collects/system/app.ss
    collects/system/compsys.ss
    collects/system/debug.ss
    collects/system/history
    collects/system/info.ss
    collects/system/invoke.ss
    collects/system/noconsle.ss
    collects/system/nuapp.ss
    collects/system/openbugs
    collects/system/splash.ss
    collects/system/system.ss
    collects/system/timesys.ss
    collects/tests/mred/sixlib.ss
    collects/userspce/paramr.ss
    collects/userspce/ricedef.ss
    collects/userspce/ricedefr.ss
    collects/userspce/ricedefs.ss
    collects/userspce/userspcr.ss
    collects/userspce/userspcs.ss
    collects/zodiac/back.ss
    collects/zodiac/basestr.ss
    collects/zodiac/corelate.ss
    collects/zodiac/invoke.ss
    collects/zodiac/link.ss
    collects/zodiac/load.ss
    collects/zodiac/make.ss
    collects/zodiac/misc.ss
    collects/zodiac/namedarg.ss
    collects/zodiac/pattern.ss
    collects/zodiac/qq.ss
    collects/zodiac/quasi.ss
    collects/zodiac/reader.ss
    collects/zodiac/readstr.ss
    collects/zodiac/scanner.ss
    collects/zodiac/scanparm.ss
    collects/zodiac/scanstr.ss
    collects/zodiac/scm-core.ss
    collects/zodiac/scm-hanc.ss
    collects/zodiac/scm-main.ss
    collects/zodiac/scm-obj.ss
    collects/zodiac/scm-ou.ss
    collects/zodiac/scm-spdy.ss
    collects/zodiac/scm-unit.ss
    collects/zodiac/sexp.ss
    collects/zodiac/sigs.ss
    collects/zodiac/x.ss
    collects/zodiac/zsigs.ss
    man/man1/DrScheme.1
    man/man1/drscheme.1
    man/man1/mred.1
    man/man1/mzscheme.1
    tests/mred/sixlib.ss
original commit: 96b3c4f6aa05997ef10ca7fe72ce11ea011cd352
This commit is contained in:
cvs2git 1997-10-15 16:52:55 +00:00
parent 81b5e77831
commit 8ce8d72fe9
13 changed files with 0 additions and 2865 deletions

View File

@ -1,183 +0,0 @@
(reference-library "refer.ss")
(begin-elaboration-time
(invoke-open-unit
(unit
(import)
(export awk match:start match:end match:substring regexp-exec)
(define awk
(lambda (get-next-record . rest)
(let*-values ([(user-fields rest) (values (car rest) (cdr rest))]
[(counter rest) (if (and (pair? rest) (symbol? (car rest)))
(values (car rest) (cdr rest))
(values (gensym) rest))]
[(user-state-var-decls rest) (values (car rest) (cdr rest))]
[(continue rest) (if (and (pair? rest) (symbol? (car rest)))
(values (car rest) (cdr rest))
(values (gensym) rest))]
[(user-state-vars) (map car user-state-var-decls)]
[(local-user-state-vars) (map gensym user-state-vars)]
[(first) (car user-fields)]
[(clauses) rest]
[(loop) (gensym)]
[(remainder) (gensym)]
[(extras) (gensym)]
[(arg) (gensym)]
[(else-ready?) (gensym)]
[(orig-on?) (gensym)]
[(post-on-on?) (gensym)]
[(escape) (gensym)]
[(initvars) null])
(letrec ([get-after-clauses
(lambda ()
(let loop ([l clauses][afters null])
(cond
[(null? l) (if (null? afters)
`((values ,@user-state-vars))
afters)]
[(eq? (caar l) 'after)
(loop (cdr l) (append afters (cdar l)))]
[else
(loop (cdr l) afters)])))]
[wrap-state
(lambda (e)
(if (eq? (car e) '=>)
`(=>
(lambda (,arg)
,@(wrap-state `((,(cadr e) ,arg)))))
`((call-with-values
(lambda () ,@e)
(lambda ,(append local-user-state-vars extras)
(set! ,else-ready? #f)
(set!-values ,user-state-vars
(values ,@local-user-state-vars)))))))]
[make-range
(lambda (include-on? include-off? body rest)
(let* ([on? (gensym)])
(set! initvars (cons `(,on? #f) initvars))
(cons
`(let ([,orig-on? ,on?])
(unless ,on? (set! ,on? ,(make-test (car body))))
(let ([,post-on-on? ,on?])
(when ,on? (set! ,on? (not ,(make-test (cadr body)))))
(when ,(if include-on?
(if include-off?
post-on-on?
on?)
(if include-off?
orig-on?
`(and ,orig-on? ,on?)))
,@(wrap-state (cddr body)))))
rest)))]
[make-test
(lambda (test)
(cond
[(string? test)
(let ([g (gensym)])
(set! initvars (cons `(,g (regexp ,test)) initvars))
`(regexp-exec ,g ,first))]
[(number? test)
`(= ,test ,counter)]
[else test]))]
[get-testing-clauses
(lambda ()
(let loop ([l clauses])
(if (null? l)
null
(let* ([clause (car l)]
[test (car clause)]
[body (cdr clause)]
[rest (loop (cdr l))])
(cond
[(or (string? test) (number? test))
(cons
`(cond [,(make-test test)
,@(wrap-state body)]
[else (void)])
rest)]
[(eq? test 'else)
(cons
`(when ,else-ready?
,@(wrap-state body))
(cons
`(set! ,else-ready? #t)
rest))]
[(eq? test 'range)
(make-range #f #f body rest)]
[(eq? test ':range)
(make-range #t #f body rest)]
[(eq? test 'range:)
(make-range #f #t body rest)]
[(eq? test ':range:)
(make-range #t #t body rest)]
[(eq? test 'after)
rest]
[(eq? test '/)
(let ([g (gensym)]
[re (car body)]
[vars (append (map (lambda (s)
(or s (gensym)))
(caddr body))
(gensym))]
[body (cdddr body)])
(set! initvars (cons `(,g (regexp ,re)) initvars))
(cons
`(cond
[(regexp-match ,re ,first)
=> (lambda (,arg)
(apply
(lambda ,vars ,@(wrap-state body))
,arg))]
[else (void)])
rest))]
[else
(cons
`(cond (,test ,@(wrap-state body)) (else (void)))
rest)])))))])
(let ([testing-clauses (get-testing-clauses)])
`(let (,@user-state-var-decls ,@initvars)
(let ,loop ([,counter 1])
(call-with-values
(lambda () ,get-next-record)
(lambda ,user-fields
(if (eof-object? ,first)
(begin
,@(get-after-clauses))
(let ([,else-ready? #t])
(let/ec ,escape
(let ([,continue
(lambda ,(append local-user-state-vars extras)
(set!-values ,user-state-vars
(values ,@local-user-state-vars))
(,escape))])
,@testing-clauses))
(,loop (add1 ,counter)))))))))))))
(define-struct match (s a))
(define match:start
(case-lambda
[(rec) (match:start rec 0)]
[(rec which) (car (list-ref (match-a rec) which))]))
(define match:end
(case-lambda
[(rec) (match:end rec 0)]
[(rec which) (cdr (list-ref (match-a rec) which))]))
(define match:substring
(case-lambda
[(rec) (match:substring rec 0)]
[(rec which) (let ([p (list-ref (match-a rec) which)])
(substring (match-s rec) (car p) (cdr p)))]))
(define regexp-exec
(lambda (re s)
(let ([r (regexp-match-positions re s)])
(if r
(make-match s r)
#f)))))))
(define-macro awk awk)

View File

@ -1,11 +0,0 @@
(require-library "compatu.ss")
(require-library "functiou.ss")
(invoke-open-unit/sig
(compound-unit/sig
(import)
(link [compat@ : mzlib:compat^ (mzlib:compat@ function@)]
[function@ : mzlib:function^ (mzlib:function@)])
(export (open compat@)))
#f)

View File

@ -1,13 +0,0 @@
(require-library "dateu.ss")
(require-library "functiou.ss")
(invoke-open-unit/sig
(compound-unit/sig
(import)
(link [date@ : mzlib:date^ (mzlib:date@ function@)]
[function@ : mzlib:function^ (mzlib:function@)])
(export (open date@)))
#f)

View File

@ -1,13 +0,0 @@
(require-library "fileu.ss")
(require-library "functio.ss")
(require-library "string.ss")
(invoke-open-unit/sig
(compound-unit/sig
(import)
(link [file@ : mzlib:file^ (mzlib:file@ string@ function@)]
[function@ : mzlib:function^ (mzlib:function@)]
[string@ : mzlib:string^ (mzlib:string@)])
(export (open file@)))
#f)

View File

@ -1,263 +0,0 @@
(unit/sig
mzlib:function^
(import)
(define identity (polymorphic (lambda (x) x)))
(define compose
(polymorphic
(case-lambda
[(f) (if (procedure? f) f (raise-type-error 'compose "procedure" f))]
[(f g)
(let ([f (compose f)]
[g (compose g)])
(if (eqv? 1 (arity f)) ; optimize: don't use call-w-values
(if (eqv? 1 (arity g)) ; optimize: single arity everywhere
(lambda (x) (f (g x)))
(lambda args (f (apply g args))))
(if (eqv? 1 (arity g)) ; optimize: single input
(lambda (a)
(call-with-values
(lambda () (g a))
f))
(lambda args
(call-with-values
(lambda () (apply g args))
f)))))]
[(f . more)
(let ([m (apply compose more)])
(compose f m))])))
(define quicksort
(polymorphic
(lambda (l less-than)
(let* ([v (list->vector l)]
[count (vector-length v)])
(let loop ([min 0][max count])
(if (< min (sub1 max))
(let ([pval (vector-ref v min)])
(let pivot-loop ([pivot min]
[pos (add1 min)])
(if (< pos max)
(let ([cval (vector-ref v pos)])
(if (less-than cval pval)
(begin
(vector-set! v pos (vector-ref v pivot))
(vector-set! v pivot cval)
(pivot-loop (add1 pivot) (add1 pos)))
(pivot-loop pivot (add1 pos))))
(if (= min pivot)
(loop (add1 pivot) max)
(begin
(loop min pivot)
(loop pivot max))))))))
(vector->list v)))))
(define ignore-errors
(polymorphic
(lambda (thunk)
(let/ec escape
(with-handlers ([void (lambda (x) (escape (void)))])
(thunk))))))
(define remove
(polymorphic
(letrec ([rm (case-lambda
[(item list) (rm item list equal?)]
[(item list equal?)
(let loop ([list list])
(cond
[(null? list) ()]
[(equal? item (car list)) (cdr list)]
[else (cons (car list)
(loop (cdr list)))]))])])
rm)))
(define remq
(polymorphic
(lambda (item list)
(remove item list eq?))))
(define remv
(polymorphic
(lambda (item list)
(remove item list eqv?))))
(define dynamic-disable-break
(polymorphic
(lambda (thunk)
(parameterize ([break-enabled #f])
(thunk)))))
(define dynamic-wind/protect-break
(polymorphic
(lambda (a b c)
(let ([enabled? (break-enabled)])
(dynamic-disable-break
(lambda ()
(dynamic-wind
a
(if enabled?
(lambda () (dynamic-enable-break b))
b)
c)))))))
(define make-single-threader
(polymorphic
(lambda ()
(let ([sema (make-semaphore 1)])
(lambda (thunk)
(dynamic-wind
(lambda () (semaphore-wait sema))
thunk
(lambda () (semaphore-post sema))))))))
;; fold : ((A -> B) B (listof A) -> B)
;; fold : ((A1 ... An -> B) B (listof A1) ... (listof An) -> B)
;; foldl builds "B" from the beginning of the list to the end of the
;; list and foldr builds the "B" from the end of the list to the
;; beginning of the list.
(define mapadd
(polymorphic
(lambda (f l last)
(letrec ((helper
(lambda (l)
(cond
[(null? l) (list last)]
[else (cons (f (car l)) (helper (cdr l)))]))))
(helper l)))))
(define foldl
(polymorphic
(letrec ((fold-one
(lambda (f init l)
(letrec ((helper
(lambda (init l)
(cond
[(null? l) init]
[else (helper (f (car l) init) (cdr l))]))))
(helper init l))))
(fold-n
(lambda (f init l)
(cond
[(ormap null? l)
(if (andmap null? l)
init
(error 'foldl "received non-equal length input lists"))]
[else (fold-n
f
(apply f (mapadd car l init))
(map cdr l))]))))
(case-lambda
[(f init l) (fold-one f init l)]
[(f init l . ls) (fold-n f init (cons l ls))]))))
(define foldr
(polymorphic
(letrec ((fold-one
(lambda (f init l)
(letrec ((helper
(lambda (init l)
(cond
[(null? l) init]
[else (f (car l) (helper init (cdr l)))]))))
(helper init l))))
(fold-n
(lambda (f init l)
(cond
[(ormap null? l)
(if (andmap null? l)
init
(error 'foldr "received non-equal length input lists"))]
[else (apply f
(mapadd car l
(fold-n f init (map cdr l))))]))))
(case-lambda
[(f init l) (fold-one f init l)]
[(f init l . ls) (fold-n f init (cons l ls))]))))
(define first (polymorphic (lambda (x)
(unless (pair? x)
(raise-type-error 'first "non-empty list" x))
(car x))))
(define second (polymorphic cadr))
(define third (polymorphic caddr))
(define fourth (polymorphic cadddr))
(define fifth (polymorphic (compose fourth cdr)))
(define sixth (polymorphic (compose fourth cddr)))
(define seventh (polymorphic (compose fourth cdddr)))
(define eighth (polymorphic (compose fourth cddddr)))
(define rest (polymorphic (lambda (x)
(unless (pair? x)
(raise-type-error 'rest "non-empty list" x))
(cdr x))))
(define build-string
(lambda (n fcn)
(unless (and (integer? n) (exact? n) (>= n 0))
(error 'build-string "~s must be an exact integer >= 0" n))
(unless (procedure? fcn)
(error 'build-string "~s must be a procedure" fcn))
(let ((str (make-string n)))
(let loop ((i 0))
(if (= i n)
str
(begin
(string-set! str i (fcn i))
(loop (add1 i))))))))
;; (build-vector n f) returns a vector 0..n-1 where the ith element is (f i).
;; The eval order is guaranteed to be: 0, 1, 2, ..., n-1.
;; eg: (build-vector 4 (lambda (i) i)) ==> #4(0 1 2 3)
(define build-vector
(polymorphic
(lambda (n fcn)
(unless (and (integer? n) (exact? n) (>= n 0))
(error 'build-vector "~s must be an exact integer >= 0" n))
(unless (procedure? fcn)
(error 'build-vector "~s must be a procedure" fcn))
(let ((vec (make-vector n)))
(let loop ((i 0))
(if (= i n) vec
(begin
(vector-set! vec i (fcn i))
(loop (add1 i)))))))))
(define build-list
(polymorphic
(lambda (n fcn)
(unless (and (integer? n) (exact? n) (>= n 0))
(error 'build-list "~s must be an exact integer >= 0" n))
(unless (procedure? fcn)
(error 'build-list "~s must be a procedure" fcn))
(if (zero? n) '()
(let ([head (list (fcn 0))])
(let loop ([i 1] [p head])
(if (= i n) head
(begin
(set-cdr! p (list (fcn i)))
(loop (add1 i) (cdr p))))))))))
(define loop-until
(polymorphic
(lambda (start done? next body)
(let loop ([i start])
(unless (done? i)
(body i)
(loop (next i)))))))
(define last-pair
(polymorphic
(lambda (l)
(if (pair? l)
(if (pair? (cdr l))
(last-pair (cdr l))
l)
(error 'last-pair "argument not a pair")))))
(define cons? pair?)
)

View File

@ -1,7 +0,0 @@
(require-library "inflateu.ss")
(invoke-open-unit/sig mzlib:inflate@ #f)

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +0,0 @@
(require-library "prettyu.ss")
(invoke-open-unit/sig mzlib:pretty-print@ #f)

View File

@ -1,141 +0,0 @@
(require-library "function.ss")
#|
(require-library "spidey.ss")
(define-primitive foldl
(case->
((a z -> z) z (listof a) -> z)
((a b z -> z) z (listof a) (listof b) -> z)
((a b c z -> z) z (listof a) (listof b) (listof c) -> z)
(((arglistof x) ->* z) z (listof (arglistof x)) ->* z)))
|#
(define-macro shared
(let ()
(define-struct twople (left right))
(define-struct cons-rhs (id car cdr))
(define-struct vector-rhs (id args))
(define-struct box-rhs (id arg))
(define-struct weak-box-rhs (id let arg))
(define-struct trans (rhs lets set!s))
(lambda (defns . body)
(letrec ([bad (lambda (s sexp)
(error 'shared (string-append s ": ~a") sexp))]
[build-args
(lambda (args howmany)
(cond
[(null? args) '()]
[(pair? args) (cons (car args)
(build-args (cdr args)
(if (number? howmany)
(sub1 howmany)
howmany)))]
[else (bad "args" args)]))]
[build-args1
(lambda (x)
(cond
[(and (pair? x) (null? (cdr x))) (list (car x))]
[else (bad "args" x)]))]
[build-args2
(lambda (x)
(if (pair? x)
(let ((xcdr (cdr x)))
(if (pair? xcdr)
(let ((xcdrcdr (cdr xcdr)))
(if (null? xcdrcdr)
(list (car x) (car xcdr))
(bad "args" x)))
(bad "args" x)))
(bad "args" x)))]
[build-defn
(lambda (x)
(unless (and (pair? x)
(symbol? (car x)))
(bad "bad binding" x))
(if (not (and (pair? (cdr x))
(pair? (cadr x))
(symbol? (caadr x))))
(make-trans x '() '())
(let ([id (car x)]
[constructor (caadr x)]
[args (cdadr x)])
(case constructor
[(list) (let ([args (build-args args 'whatever)])
(if (null? args)
(make-trans `(,id (list))
'()
'())
(make-cons-rhs id (car args) `(list ,@(cdr args)))))]
[(vector) (let ([args (build-args args 'whatever)])
(make-vector-rhs id args))]
[(box) (let ([args (build-args1 args)])
(make-box-rhs id (car args)))]
; [(make-weak-box) (let ([args (build-args1 args)])
; (make-weak-box-rhs id (car args)))]
[(cons) (let ([args (build-args2 args)])
(make-cons-rhs id (car args) (cadr args)))]
[else (make-trans x '() '())]))))]
[build-defns
(lambda (x)
(cond
[(null? x) '()]
[(pair? x) (cons (build-defn (car x))
(build-defns (cdr x)))]
[else (bad "defns list" x)]))]
[transform
(lambda (binding)
(cond
[(vector-rhs? binding)
(define-struct b&s (bind set!))
(let* ([id (vector-rhs-id binding)])
(let ([elems
(twople-left
(foldl (lambda (x data)
(let ([list (twople-left data)]
[i (twople-right data)]
[eid (gensym)])
(make-twople (cons (make-b&s `(,eid ,x)
`(vector-set! ,id ,i ,eid))
list)
(+ i 1))))
(make-twople '() 0)
(vector-rhs-args binding)))])
(make-trans `(,id (vector ,@(map (lambda (x) '(void))
(vector-rhs-args binding))))
(map b&s-bind elems)
(map b&s-set! elems))))]
[(box-rhs? binding)
(let ([id (box-rhs-id binding)]
[eid (gensym)])
(make-trans `(,id (box (void)))
(list `(,eid ,(box-rhs-arg binding)))
(list `(set-box! ,id ,eid))))]
[(weak-box-rhs? binding)
(let ([id (weak-box-rhs-id binding)]
[eid (gensym)])
(make-trans `(,id (make-weak-box (void)))
(list `(,eid ,(weak-box-rhs-arg binding)))
(list `(set-weak-box! ,id ,eid))))]
[(cons-rhs? binding)
(let ([id (cons-rhs-id binding)]
[car-id (gensym)]
[cdr-id (gensym)])
(make-trans `(,id (cons (void) (void)))
(list `(,car-id ,(cons-rhs-car binding))
`(,cdr-id ,(cons-rhs-cdr binding)))
(list `(set-car! ,id ,car-id)
`(set-cdr! ,id ,cdr-id))))]
[(trans? binding) binding]
[else (bad "internal error:" binding)]))]
[transformed-defns (map transform (build-defns defns))])
(list 'letrec*
(map trans-rhs transformed-defns)
(list 'let (apply append (map trans-lets transformed-defns))
(cons 'begin
(append (apply append (map trans-set!s transformed-defns))
body))))))))

View File

@ -1,5 +0,0 @@
(require-library "stringu.ss")
(invoke-open-unit/sig mzlib:string@ #f)

View File

@ -1,7 +0,0 @@
(require-library "threadu.ss")
(invoke-open-unit/sig mzlib:thread@ #f)

View File

@ -1,266 +0,0 @@
; Time-stamp: <97/08/19 15:07:32 shriram>
; Time-stamp: <97/07/12 12:44:01 shriram>
; Differences from the Chez implementation:
; - The code does not respect tail-calls.
; - If the library is loaded more than once, especially in the middle
; of a trace, the behavior is not well-defined.
(define-signature mzlib:trace^
(-:trace-level -:trace-print-args -:trace-print-results
-:trace-table
-:make-traced-entry -:traced-entry-original-proc -:traced-entry-trace-proc
trace untrace))
(reference-library "prettyu.ss")
(define mzlib:trace@
(unit/sig mzlib:trace^
(import mzlib:pretty-print^)
(define max-dash-space-depth 10)
(define number-nesting-depth 6)
(define as-spaces
(lambda (s)
(let ((n (string-length s)))
(apply string-append
(let loop ((k n))
(if (zero? k) '("")
(cons " " (loop (sub1 k)))))))))
(define-struct prefix-entry (for-first for-rest))
(define prefixes (make-vector 20 #f))
(define prefix-vector-length 20)
(define lookup-prefix
(lambda (n)
(and (< n prefix-vector-length)
(vector-ref prefixes n))))
(define insert-prefix
(lambda (n first rest)
(if (>= n prefix-vector-length)
(let ((v (make-vector (* 2 prefix-vector-length) #f)))
(let loop ((k 0))
(when (< k prefix-vector-length)
(vector-set! v k (vector-ref prefixes k))
(loop (add1 k))))
(set! prefixes v)
(set! prefix-vector-length (* 2 prefix-vector-length))
(insert-prefix n first rest))
(vector-set! prefixes n (make-prefix-entry first rest)))))
(define construct-prefixes
(lambda (level)
(let loop ((n level)
(first '("|"))
(rest '(" ")))
(if (>= n max-dash-space-depth)
(let-values (((pre-first pre-rest)
(build-prefixes number-nesting-depth)))
(let ((s (number->string level)))
(values
(apply string-append
(cons pre-first (cons "[" (cons s (cons "]" '())))))
(apply string-append
(cons pre-rest (cons " " (cons (as-spaces s)
(cons " " '()))))))))
(cond
((= n 0) (values (apply string-append (reverse first))
(apply string-append (reverse rest))))
((= n 1) (loop (- n 1)
(cons '" " first)
(cons '" " rest)))
(else (loop (- n 2)
(cons " |" first)
(cons " " rest))))))))
(define build-prefixes
(lambda (level)
(let ((p (lookup-prefix level)))
(if p
(values (prefix-entry-for-first p)
(prefix-entry-for-rest p))
(let-values (((first rest)
(construct-prefixes level)))
(insert-prefix level first rest)
(values first rest))))))
(define -:trace-level -1)
(define -:trace-print-args
(lambda (name args)
(let-values (((first rest)
(build-prefixes -:trace-level)))
(parameterize ((pretty-print-print-line
(lambda (n port offset width)
(display
(if n
(if (zero? n) first
(format "~n~a" rest))
(format "~n"))
port)
(if n
(if (zero? n)
(string-length first)
(string-length rest))
0))))
(pretty-print (cons name args))))))
(define -:trace-print-results
(lambda (name results)
(let-values (((first rest)
(build-prefixes -:trace-level)))
(parameterize ((pretty-print-print-line
(lambda (n port offset width)
(display
(if n
(if (zero? n) first
(format "~n~a" rest))
(format "~n"))
port)
(if n
(if (zero? n)
(string-length first)
(string-length rest))
0))))
(cond
((null? results)
(pretty-display "*** no values ***"))
((null? (cdr results))
(pretty-print (car results)))
(else
(pretty-print (car results))
(parameterize ((pretty-print-print-line
(lambda (n port offset width)
(display
(if n
(if (zero? n) rest
(format "~n~a" rest))
(format "~n"))
port)
(if n
(string-length rest)
0))))
(for-each pretty-print (cdr results)))))))))
(define-struct traced-entry (original-proc trace-proc))
(define -:make-traced-entry make-traced-entry)
(define -:traced-entry-original-proc traced-entry-original-proc)
(define -:traced-entry-trace-proc traced-entry-trace-proc)
(define -:trace-table
(make-hash-table))
(define trace
(lambda ids
(let loop ((ids ids))
(unless (null? ids)
(unless (symbol? (car ids))
(error 'trace "~s not a name" (car ids)))
(loop (cdr ids))))
`(#%begin
,@(map
(lambda (id)
`(#%with-handlers ((#%exn:variable?
(#%lambda (exn)
(#%if (#%eq? (#%exn:variable-id exn) ',id)
(#%error 'trace
"~s is not bound" ',id)
(#%raise exn)))))
(#%let ((global (#%global-defined-value ',id)))
(#%unless (#%procedure? global)
(#%error 'trace
"the top-level value of ~s is not a procedure" ',id)))))
ids)
,@(map
(lambda (id)
(let ((traced-name (string->symbol
(string-append "traced-"
(symbol->string id))))
(table-entry (gensym 'table-entry))
(real-value (gensym 'real-value))
(global-value (gensym 'global-value)))
`(#%let ((,global-value (#%global-defined-value ',id)))
(#%let ((,table-entry (#%hash-table-get -:trace-table ',id
(#%lambda () #f))))
(#%unless (#%and ,table-entry
(#%eq? ,global-value
(-:traced-entry-trace-proc ,table-entry)))
(#%let* ((,real-value ,global-value)
(,traced-name
(#%lambda args
(#%dynamic-wind
(lambda ()
(#%set! -:trace-level
(#%add1 -:trace-level)))
(lambda ()
(-:trace-print-args ',id args)
(#%call-with-values
(#%lambda ()
(#%apply ,real-value args))
(#%lambda results
(flush-output)
(-:trace-print-results ',id
results)
(#%apply #%values results))))
(lambda ()
(#%set! -:trace-level
(#%sub1 -:trace-level)))))))
(#%hash-table-put! -:trace-table ',id
(-:make-traced-entry ,real-value ,traced-name))
(#%global-defined-value ',id ,traced-name)))))))
ids)
(#%quote ,ids))))
(define untrace
(lambda ids
(let loop ((ids ids))
(unless (null? ids)
(unless (symbol? (car ids))
(error 'untrace "~s not an identifier" (car ids)))
(loop (cdr ids)))
`(#%apply #%append
(#%list
,@(map (lambda (id)
`(let ((entry (#%hash-table-get -:trace-table
',id (#%lambda () #f))))
(#%if (#%and entry
(#%eq? (#%global-defined-value ',id)
(-:traced-entry-trace-proc entry)))
(#%begin
(#%hash-table-put! -:trace-table
',id #f)
(#%global-defined-value ',id
(-:traced-entry-original-proc entry))
(#%list ',id))
'())))
ids))))))
))
(invoke-open-unit/sig
(compound-unit/sig
(import)
(link
(PRETTY : mzlib:pretty-print^
(mzlib:pretty-print@))
(TRACE : mzlib:trace^
(mzlib:trace@ PRETTY)))
(export
(open TRACE)))
#f)
(define-macro trace trace)
(define-macro untrace untrace)
(keyword-name '-:trace-print-args)
(keyword-name '-:trace-print-results)
(keyword-name '-:trace-table)
(keyword-name '-:make-traced-entry)
(keyword-name '-:traced-entry-original-proc)
(keyword-name '-:traced-entry-trace-proc)

View File

@ -1,2 +0,0 @@
;; Obsolete