null? copy! map-into! etc.
This commit is contained in:
parent
066947bdb2
commit
93f8fe8c5c
|
@ -25,15 +25,12 @@ VECTOR-LIB SEQUENCE-LIB ABSEQUENCES, also SL
|
||||||
* Predicates or so
|
* Predicates or so
|
||||||
vector? sequence? absequence?
|
vector? sequence? absequence?
|
||||||
sequence-behavior?
|
sequence-behavior?
|
||||||
[ versions with 1 sequence and optional start & end parameters ]
|
vector-null? sequence-null?
|
||||||
vector-every sequence-every
|
vector-every sequence-every
|
||||||
vector-any sequence-any
|
vector-any sequence-any
|
||||||
[ versions with >1 sequence but no optional start & end parameters ]
|
|
||||||
vectors-every sequences-every
|
vectors-every sequences-every
|
||||||
vectors-any sequences-any
|
vectors-any sequences-any
|
||||||
[ 2 seq. args and opt. start & end parms for both seqs ]
|
|
||||||
vector= sequence=
|
vector= sequence=
|
||||||
[ >=0 sequence args, no start & end parameters ]
|
|
||||||
vectors= sequences=
|
vectors= sequences=
|
||||||
|
|
||||||
* Constructors
|
* Constructors
|
||||||
|
@ -54,6 +51,7 @@ vector-ref sequence-ref absequence-ref
|
||||||
absequence:behavior
|
absequence:behavior
|
||||||
vector-copy sequence-copy
|
vector-copy sequence-copy
|
||||||
sequence-copy/maker
|
sequence-copy/maker
|
||||||
|
vector-copy! sequence-copy!
|
||||||
subvector subsequence
|
subvector subsequence
|
||||||
|
|
||||||
* Modification
|
* Modification
|
||||||
|
@ -65,15 +63,15 @@ sequence-tabulate! vector-tabulate!
|
||||||
vector-append sequence-append
|
vector-append sequence-append
|
||||||
|
|
||||||
* Fold, Unfold & Map
|
* Fold, Unfold & Map
|
||||||
[ versions with 1 sequence and optional start & end parameters ]
|
|
||||||
vector-map sequence-map
|
vector-map sequence-map
|
||||||
sequence-map/maker
|
sequence-map/maker
|
||||||
|
vector-map-into! sequence-map-into!
|
||||||
vector-for-each sequence-for-each
|
vector-for-each sequence-for-each
|
||||||
vector-fold sequence-fold
|
vector-fold sequence-fold
|
||||||
vector-fold-right sequence-fold-right
|
vector-fold-right sequence-fold-right
|
||||||
[ versions with >1 sequence but no start & end parameters ]
|
|
||||||
vectors-map sequences-map
|
vectors-map sequences-map
|
||||||
sequences-map/maker
|
sequences-map/maker
|
||||||
|
vectors-map-into! sequences-map-into!
|
||||||
vectors-for-each sequences-for-each
|
vectors-for-each sequences-for-each
|
||||||
vectors-fold sequences-fold
|
vectors-fold sequences-fold
|
||||||
vectors-fold-right sequences-fold-right
|
vectors-fold-right sequences-fold-right
|
||||||
|
@ -140,8 +138,11 @@ library grows, but please report deviations anyway.
|
||||||
the respective srfi, the result complies with the srfi spec.
|
the respective srfi, the result complies with the srfi spec.
|
||||||
E.g. ``sequences-fold = fold'' on lists,
|
E.g. ``sequences-fold = fold'' on lists,
|
||||||
``sequence-fold = string-fold'' on strings.
|
``sequence-fold = string-fold'' on strings.
|
||||||
Exception: SEQUENCE= vs. STRING= -- parameter lists don't match (ELT=)
|
Attention:
|
||||||
|
SEQUENCE= vs. STRING= -- parameter lists don't match (ELT=)
|
||||||
|
SEQUENCE-TABULATE! (and VECTOR-TABULATE) --
|
||||||
|
parameter list is patterned after (STRING-TABULATE proc len), not
|
||||||
|
after (LIST-TABULATE len proc).
|
||||||
|
|
||||||
* Predicates
|
* Predicates
|
||||||
|
|
||||||
|
@ -155,6 +156,13 @@ inclusions the boolean B0 ==> B1 and B2 ==> B1.
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
(vector-null? s) --> b
|
||||||
|
(sequence-null? s) --> b
|
||||||
|
|
||||||
|
Synopsis: Return B := boolean(s.length = 0).
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
(vector-every foo? s [start end]) --> x
|
(vector-every foo? s [start end]) --> x
|
||||||
(sequence-every foo? s [start end]) --> x
|
(sequence-every foo? s [start end]) --> x
|
||||||
|
|
||||||
|
@ -224,6 +232,7 @@ of minimal length with the elements S[0] = X0, ...
|
||||||
(vector-tabulate proc len) --> s
|
(vector-tabulate proc len) --> s
|
||||||
|
|
||||||
Synopsis: Make vector s[0:len) with s[i] := (proc i).
|
Synopsis: Make vector s[0:len) with s[i] := (proc i).
|
||||||
|
[ after (string-tabulate proc len) rather than (list-tabulate len proc) ]
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
@ -286,6 +295,13 @@ S1 = < s0[start+i] : i in [0:end-start) >.
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
(vector-copy! s1 start1 s0 [start0 end0]) --> unspec
|
||||||
|
(sequence-copy! s1 start1 s0 [start0 end0]) --> unspec
|
||||||
|
|
||||||
|
Synopsis: Set s1[start1 + i] := s0[start0 + i] for 0 <= i < end0 - start0.
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
(subvector s0 start end) --> s1
|
(subvector s0 start end) --> s1
|
||||||
(subsequence s0 start end) --> s1
|
(subsequence s0 start end) --> s1
|
||||||
|
|
||||||
|
@ -352,6 +368,31 @@ arg. ]
|
||||||
|
|
||||||
*
|
*
|
||||||
|
|
||||||
|
(vector-map-into! s1 proc s0 [start1 end1 start0]) --> s1
|
||||||
|
(sequence-map-into! s1 proc s0 [start1 end1 start0]) --> s1
|
||||||
|
|
||||||
|
Synopsis: Set s1[start1 + i] := (proc s0[start0 + i])
|
||||||
|
for 0 <= i < end1 - start1, return s1.
|
||||||
|
|
||||||
|
Attention: differing from CL's MAP-INTO, these procs expect
|
||||||
|
end1 - start1 <= s0.length - start0, i.e. the destination S1 drives the
|
||||||
|
loop, as with MAP! in SRFI-1. Differing from SEQUENCE-COPY!, the optionals
|
||||||
|
relate 2 to the destination S1 and 1 to the source S0 instead of 1 to the
|
||||||
|
destination and 2 to the source. (Why? Because of the different loop
|
||||||
|
termination criteria: dest length vs. src length.)
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
|
(vectors-map-into! s1 proc s00 ...) --> s1
|
||||||
|
(sequences-map-into! s1 proc s00 ...) --> s1
|
||||||
|
|
||||||
|
Synopsis: Set s1[i] := (proc s00[i] ...) for i in [0:s1.length), return s1.
|
||||||
|
|
||||||
|
Attention: differing from CL's MAP-INTO, these procs expect the sequences
|
||||||
|
S00, ... to be no less long than the destination S1, like MAP! in SRFI-1.
|
||||||
|
|
||||||
|
*
|
||||||
|
|
||||||
(vector-for-each proc s [start end]) --> unspec
|
(vector-for-each proc s [start end]) --> unspec
|
||||||
(vectors-for-each f s0 s1 ...) --> unspec
|
(vectors-for-each f s0 s1 ...) --> unspec
|
||||||
(sequence-for-each proc s [start end]) --> unspec
|
(sequence-for-each proc s [start end]) --> unspec
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
; See the file COPYING distributed with the Scheme Untergrund Library
|
; See the file COPYING distributed with the Scheme Untergrund Library
|
||||||
|
|
||||||
;;; sequence operations definABLE in terms of the elementary operations
|
;;; sequence operations definABLE in terms of the elementary operations
|
||||||
;;; with no regard to the concrete sequence type
|
;;; The procedures dispatch early on the specific sequence type but
|
||||||
|
;;; implement the ``generic behaviour.''
|
||||||
|
|
||||||
(define (sequence->list s . opts)
|
(define (sequence->list s . opts)
|
||||||
(cond ((vector? s)
|
(cond ((vector? s)
|
||||||
|
@ -20,7 +21,7 @@
|
||||||
(apply vector-fill! s x opts))
|
(apply vector-fill! s x opts))
|
||||||
((string? s)
|
((string? s)
|
||||||
(apply string-fill! s x opts))
|
(apply string-fill! s x opts))
|
||||||
((and (pair? s) (null? opts))
|
((pair? s)
|
||||||
(apply list-fill! s x opts))
|
(apply list-fill! s x opts))
|
||||||
(else
|
(else
|
||||||
(apply contiguous-sequence-fill! s x opts))))
|
(apply contiguous-sequence-fill! s x opts))))
|
||||||
|
@ -55,6 +56,16 @@
|
||||||
(apply contiguous-sequence-copy s opts))))
|
(apply contiguous-sequence-copy s opts))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (sequence-copy! s1 start1 s0 . opts)
|
||||||
|
(cond
|
||||||
|
((and (vector? s1) (vector? s0))
|
||||||
|
(apply vector-copy! s1 start1 s0 opts))
|
||||||
|
((and (string? s1) (string? s0))
|
||||||
|
(apply string-copy! s1 start1 s0 opts))
|
||||||
|
(else
|
||||||
|
(apply contiguous-sequence-copy! s1 start1 s0 opts))))
|
||||||
|
|
||||||
|
|
||||||
(define (sequence-append seq . seqs)
|
(define (sequence-append seq . seqs)
|
||||||
(cond ((vector? seq)
|
(cond ((vector? seq)
|
||||||
(apply vector-append seq seqs))
|
(apply vector-append seq seqs))
|
||||||
|
@ -77,6 +88,15 @@
|
||||||
(apply contiguous-sequence-map proc s opts))))
|
(apply contiguous-sequence-map proc s opts))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (sequence-map-into! s1 proc s0 . opts)
|
||||||
|
(cond ((and (vector? s1) (vector? s0))
|
||||||
|
(apply vector-map-into! s1 proc s0 opts))
|
||||||
|
((and (pair? s1) (pair? s0) (null? opts))
|
||||||
|
(map! (lambda (x y) (proc y)) s1 s0))
|
||||||
|
(else
|
||||||
|
(apply contiguous-sequence-map-into! s1 proc s0 opts))))
|
||||||
|
|
||||||
|
|
||||||
(define (sequence-for-each proc s . opts)
|
(define (sequence-for-each proc s . opts)
|
||||||
(cond ((vector? s)
|
(cond ((vector? s)
|
||||||
(apply vector-for-each proc s opts))
|
(apply vector-for-each proc s opts))
|
||||||
|
@ -109,6 +129,13 @@
|
||||||
(else (apply contiguous-sequence-fold-right kons nil s opts))))
|
(else (apply contiguous-sequence-fold-right kons nil s opts))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (sequence-null? s)
|
||||||
|
(cond ((vector? s) (vector-null? s))
|
||||||
|
((string? s) (string-null? s))
|
||||||
|
((pair? s) (null? s))
|
||||||
|
(else (contiguous-sequence-null? s))))
|
||||||
|
|
||||||
|
|
||||||
(define (sequence-any pred s . opts)
|
(define (sequence-any pred s . opts)
|
||||||
(cond ((vector? s)
|
(cond ((vector? s)
|
||||||
(apply vector-any pred s opts))
|
(apply vector-any pred s opts))
|
||||||
|
@ -135,6 +162,7 @@
|
||||||
(define sequence-append contiguous-sequence-append)
|
(define sequence-append contiguous-sequence-append)
|
||||||
(define sequences-map contiguous-sequences-map)
|
(define sequences-map contiguous-sequences-map)
|
||||||
(define sequences-map/maker contiguous-sequences-map/maker)
|
(define sequences-map/maker contiguous-sequences-map/maker)
|
||||||
|
(define sequences-map-into! contiguous-sequences-map-into!)
|
||||||
(define sequences-for-each contiguous-sequences-for-each)
|
(define sequences-for-each contiguous-sequences-for-each)
|
||||||
(define sequences-fold contiguous-sequences-fold)
|
(define sequences-fold contiguous-sequences-fold)
|
||||||
(define sequences-fold-right contiguous-sequences-fold-right)
|
(define sequences-fold-right contiguous-sequences-fold-right)
|
||||||
|
|
|
@ -12,11 +12,14 @@
|
||||||
;;; sequence-tabulate!
|
;;; sequence-tabulate!
|
||||||
;;; subsequence
|
;;; subsequence
|
||||||
;;; sequence-copy
|
;;; sequence-copy
|
||||||
|
;;; sequence-copy!
|
||||||
;;; sequence-append
|
;;; sequence-append
|
||||||
;;; sequence-map sequences-map sequences-map/maker
|
;;; sequence-map sequences-map sequences-map/maker
|
||||||
|
;;; sequence-map-into! sequences-map-into!
|
||||||
;;; sequence-for-each sequences-for-each
|
;;; sequence-for-each sequences-for-each
|
||||||
;;; sequence-fold sequences-fold
|
;;; sequence-fold sequences-fold
|
||||||
;;; sequence-fold-right sequence-fold-right
|
;;; sequence-fold-right sequence-fold-right
|
||||||
|
;;; sequence-null?
|
||||||
;;; sequence-any sequences-any
|
;;; sequence-any sequences-any
|
||||||
;;; sequence-every sequences-every
|
;;; sequence-every sequences-every
|
||||||
;;; sequence= sequences=
|
;;; sequence= sequences=
|
||||||
|
@ -32,7 +35,8 @@
|
||||||
|
|
||||||
(define (sequence->list s . opts)
|
(define (sequence->list s . opts)
|
||||||
(let-optionals opts ((start 0) (end (sequence-length s)))
|
(let-optionals opts ((start 0) (end (sequence-length s)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length s))
|
||||||
|
sequence->list)
|
||||||
(let loop ((i end) (xs '()))
|
(let loop ((i end) (xs '()))
|
||||||
(if (= i start) xs
|
(if (= i start) xs
|
||||||
(loop (- i 1) (cons (sequence-ref s (- i 1)) xs))))))
|
(loop (- i 1) (cons (sequence-ref s (- i 1)) xs))))))
|
||||||
|
@ -40,7 +44,8 @@
|
||||||
;; unspecified return value as usual
|
;; unspecified return value as usual
|
||||||
(define (sequence-fill! s x . opts)
|
(define (sequence-fill! s x . opts)
|
||||||
(let-optionals opts ((start 0) (end (sequence-length s)))
|
(let-optionals opts ((start 0) (end (sequence-length s)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length s))
|
||||||
|
sequence-fill!)
|
||||||
(let loop ((i start))
|
(let loop ((i start))
|
||||||
(if (< i end)
|
(if (< i end)
|
||||||
(begin
|
(begin
|
||||||
|
@ -49,9 +54,7 @@
|
||||||
|
|
||||||
|
|
||||||
(define (sequence-tabulate! s start proc len)
|
(define (sequence-tabulate! s start proc len)
|
||||||
(assert (and (sequence? s)
|
(assert (<= 0 start (+ start len) (sequence-length s))
|
||||||
(procedure? proc)
|
|
||||||
(<= 0 start (+ start len) (sequence-length s)))
|
|
||||||
sequence-tabulate!)
|
sequence-tabulate!)
|
||||||
(do ((i 0 (+ i 1)))
|
(do ((i 0 (+ i 1)))
|
||||||
((= i len) s)
|
((= i len) s)
|
||||||
|
@ -62,7 +65,8 @@
|
||||||
(define (sequence-copy/maker maker s . opts)
|
(define (sequence-copy/maker maker s . opts)
|
||||||
(let-optionals opts ((start 0)
|
(let-optionals opts ((start 0)
|
||||||
(end (sequence-length s)))
|
(end (sequence-length s)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length s))
|
||||||
|
sequence-copy/maker)
|
||||||
(let* ((len (- end start))
|
(let* ((len (- end start))
|
||||||
(ss (maker len)))
|
(ss (maker len)))
|
||||||
(do ((i 0 (+ i 1)))
|
(do ((i 0 (+ i 1)))
|
||||||
|
@ -76,6 +80,17 @@
|
||||||
s opts))
|
s opts))
|
||||||
|
|
||||||
|
|
||||||
|
(define (sequence-copy! s1 start1 s0 . opts)
|
||||||
|
(let-optionals opts ((start0 0) (end0 (sequence-length s0)))
|
||||||
|
(assert (<= 0 start0 end0 (sequence-length s0))
|
||||||
|
sequence-copy!)
|
||||||
|
(assert (<= 0 start1 (+ start1 (- end0 start0)) (sequence-length s1))
|
||||||
|
sequence-copy!)
|
||||||
|
(do ((i0 start0 (+ i0 1))
|
||||||
|
(i1 start1 (+ i1 1)))
|
||||||
|
((= i0 end0) (unspecific))
|
||||||
|
(sequence-set! s1 i1 (sequence-ref s0 i0)))))
|
||||||
|
|
||||||
;; ...
|
;; ...
|
||||||
(define (subsequence s start end)
|
(define (subsequence s start end)
|
||||||
(sequence-copy s start end))
|
(sequence-copy s start end))
|
||||||
|
@ -84,7 +99,8 @@
|
||||||
(define (sequence-fold kons nil s . opts)
|
(define (sequence-fold kons nil s . opts)
|
||||||
(let-optionals opts ((start 0)
|
(let-optionals opts ((start 0)
|
||||||
(end (sequence-length s)))
|
(end (sequence-length s)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length s))
|
||||||
|
sequence-fold)
|
||||||
(let loop ((subtotal nil) (i start))
|
(let loop ((subtotal nil) (i start))
|
||||||
(if (= i end) subtotal
|
(if (= i end) subtotal
|
||||||
(loop (kons (sequence-ref s i) subtotal) (+ i 1))))))
|
(loop (kons (sequence-ref s i) subtotal) (+ i 1))))))
|
||||||
|
@ -108,7 +124,8 @@
|
||||||
(define (sequence-fold-right kons nil s . opts)
|
(define (sequence-fold-right kons nil s . opts)
|
||||||
(let-optionals opts ((start 0)
|
(let-optionals opts ((start 0)
|
||||||
(end (sequence-length s)))
|
(end (sequence-length s)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length s))
|
||||||
|
sequence-fold-right)
|
||||||
(let loop ((subtotal nil) (i end))
|
(let loop ((subtotal nil) (i end))
|
||||||
(if (= i start) subtotal
|
(if (= i start) subtotal
|
||||||
(loop (kons (sequence-ref s (- i 1)) subtotal) (- i 1))))))
|
(loop (kons (sequence-ref s (- i 1)) subtotal) (- i 1))))))
|
||||||
|
@ -144,7 +161,8 @@
|
||||||
|
|
||||||
(define (sequence-for-each proc seq . opts)
|
(define (sequence-for-each proc seq . opts)
|
||||||
(let-optionals opts ((start 0) (end (sequence-length seq)))
|
(let-optionals opts ((start 0) (end (sequence-length seq)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length seq))
|
||||||
|
sequence-for-each)
|
||||||
(do ((i start (+ i 1)))
|
(do ((i start (+ i 1)))
|
||||||
((= i end) (unspecific))
|
((= i end) (unspecific))
|
||||||
(proc (sequence-ref seq i)))))
|
(proc (sequence-ref seq i)))))
|
||||||
|
@ -161,7 +179,8 @@
|
||||||
(define (sequence-map/maker maker proc seq . opts)
|
(define (sequence-map/maker maker proc seq . opts)
|
||||||
(let-optionals opts ((start 0)
|
(let-optionals opts ((start 0)
|
||||||
(end (sequence-length seq)))
|
(end (sequence-length seq)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length seq))
|
||||||
|
sequence-map/maker)
|
||||||
(let ((res (maker (- end start))))
|
(let ((res (maker (- end start))))
|
||||||
(do ((i start (+ i 1)))
|
(do ((i start (+ i 1)))
|
||||||
((= i end) res)
|
((= i end) res)
|
||||||
|
@ -170,7 +189,7 @@
|
||||||
|
|
||||||
|
|
||||||
(define (sequence-map proc seq . opts)
|
(define (sequence-map proc seq . opts)
|
||||||
(apply sequences-map/maker
|
(apply sequence-map/maker
|
||||||
(lambda (n) (make-another-sequence seq n))
|
(lambda (n) (make-another-sequence seq n))
|
||||||
seq opts))
|
seq opts))
|
||||||
|
|
||||||
|
@ -190,9 +209,39 @@
|
||||||
proc seq seqs))
|
proc seq seqs))
|
||||||
|
|
||||||
|
|
||||||
|
(define (sequence-map-into! s1 proc s0 . opts)
|
||||||
|
(let-optionals opts ((start1 0)
|
||||||
|
(end1 (sequence-length s1))
|
||||||
|
(start0 0))
|
||||||
|
(assert (<= 0 start0 (sequence-length s0))
|
||||||
|
sequence-map-into!)
|
||||||
|
(assert (<= 0 start1 (sequence-length s1))
|
||||||
|
sequence-map-into!)
|
||||||
|
(assert (<= (- end1 start1) (- (sequence-length s0) start0))
|
||||||
|
sequence-map-into!)
|
||||||
|
(do ((i0 start0 (+ i0 1))
|
||||||
|
(i1 start1 (+ i1 1)))
|
||||||
|
((= i1 end1) s1)
|
||||||
|
(sequence-set! s1 i1 (proc (sequence-ref s0 i0))))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (sequences-map-into! seq proc . seqs)
|
||||||
|
(let ((end (sequence-length seq)))
|
||||||
|
(do ((i 0 (+ i 1)))
|
||||||
|
((= i end) seq)
|
||||||
|
(sequence-set! seq i (apply proc
|
||||||
|
(map (lambda (s) (sequence-ref s i))
|
||||||
|
seqs))))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (sequence-null? s)
|
||||||
|
(= (sequence-length s) 0))
|
||||||
|
|
||||||
|
|
||||||
(define (sequence-any foo? seq . opts)
|
(define (sequence-any foo? seq . opts)
|
||||||
(let-optionals opts ((start 0) (end (sequence-length seq)))
|
(let-optionals opts ((start 0) (end (sequence-length seq)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length seq))
|
||||||
|
sequence-any)
|
||||||
(let loop ((i start))
|
(let loop ((i start))
|
||||||
(cond ((= i end) #f)
|
(cond ((= i end) #f)
|
||||||
((foo? (sequence-ref seq i)) => id)
|
((foo? (sequence-ref seq i)) => id)
|
||||||
|
@ -212,7 +261,8 @@
|
||||||
|
|
||||||
(define (sequence-every foo? seq . opts)
|
(define (sequence-every foo? seq . opts)
|
||||||
(let-optionals opts ((start 0) (end (sequence-length seq)))
|
(let-optionals opts ((start 0) (end (sequence-length seq)))
|
||||||
(assert (<= 0 start end))
|
(assert (<= 0 start end (sequence-length seq))
|
||||||
|
sequence-every)
|
||||||
(let loop ((i start) (res #t))
|
(let loop ((i start) (res #t))
|
||||||
(cond ((= i end) res)
|
(cond ((= i end) res)
|
||||||
((foo? (sequence-ref seq i))
|
((foo? (sequence-ref seq i))
|
||||||
|
@ -232,9 +282,10 @@
|
||||||
|
|
||||||
|
|
||||||
(define (sequence= elt= s0 s1 . opts)
|
(define (sequence= elt= s0 s1 . opts)
|
||||||
(assert (procedure? elt=))
|
|
||||||
(let-optionals opts ((start0 0) (end0 (sequence-length s0))
|
(let-optionals opts ((start0 0) (end0 (sequence-length s0))
|
||||||
(start1 0) (end1 (sequence-length s1)))
|
(start1 0) (end1 (sequence-length s1)))
|
||||||
|
(assert (<= start0 end0 (sequence-length s0)) sequence=)
|
||||||
|
(assert (<= start1 end1 (sequence-length s1)) sequence=)
|
||||||
(and (= (- end0 start0)
|
(and (= (- end0 start0)
|
||||||
(- end1 start1))
|
(- end1 start1))
|
||||||
(let loop ((i0 start0) (i1 start1))
|
(let loop ((i0 start0) (i1 start1))
|
||||||
|
@ -246,7 +297,6 @@
|
||||||
|
|
||||||
|
|
||||||
(define (sequences= elt= . seqs)
|
(define (sequences= elt= . seqs)
|
||||||
(assert (procedure? elt=))
|
|
||||||
(if (null? seqs) #t
|
(if (null? seqs) #t
|
||||||
(let loop ((s (first seqs)) (ss (rest seqs)))
|
(let loop ((s (first seqs)) (ss (rest seqs)))
|
||||||
(cond ((null? ss) #t)
|
(cond ((null? ss) #t)
|
||||||
|
|
|
@ -16,13 +16,16 @@
|
||||||
sequence-fill!
|
sequence-fill!
|
||||||
subsequence
|
subsequence
|
||||||
sequence-copy
|
sequence-copy
|
||||||
|
sequence-copy!
|
||||||
sequence-copy/maker
|
sequence-copy/maker
|
||||||
sequence-append
|
sequence-append
|
||||||
sequence-map sequences-map
|
sequence-map sequences-map
|
||||||
sequence-map/maker sequences-map/maker
|
sequence-map/maker sequences-map/maker
|
||||||
|
sequence-map-into! sequences-map-into!
|
||||||
sequence-for-each sequences-for-each
|
sequence-for-each sequences-for-each
|
||||||
sequence-fold sequences-fold
|
sequence-fold sequences-fold
|
||||||
sequence-fold-right sequences-fold-right
|
sequence-fold-right sequences-fold-right
|
||||||
|
sequence-null?
|
||||||
sequence-any sequences-any
|
sequence-any sequences-any
|
||||||
sequence-every sequences-every
|
sequence-every sequences-every
|
||||||
sequence= sequences=
|
sequence= sequences=
|
||||||
|
@ -70,15 +73,19 @@
|
||||||
vector-tabulate!
|
vector-tabulate!
|
||||||
subvector
|
subvector
|
||||||
vector-copy
|
vector-copy
|
||||||
|
vector-copy!
|
||||||
vector-append
|
vector-append
|
||||||
vector-map ; forget the optional MAKER arg
|
vector-map ; forget the optional MAKER arg
|
||||||
|
vector-map-into!
|
||||||
vector-for-each
|
vector-for-each
|
||||||
vector-fold
|
vector-fold
|
||||||
vector-fold-right
|
vector-fold-right
|
||||||
|
vector-null?
|
||||||
vector-any
|
vector-any
|
||||||
vector-every
|
vector-every
|
||||||
vector=
|
vector=
|
||||||
vectors-map ; but not vectors-map/maker
|
vectors-map ; but not vectors-map/maker
|
||||||
|
vectors-map-into!
|
||||||
vectors-for-each
|
vectors-for-each
|
||||||
vectors-fold
|
vectors-fold
|
||||||
vectors-fold-right
|
vectors-fold-right
|
||||||
|
|
|
@ -13,8 +13,10 @@
|
||||||
|
|
||||||
;; specialists for lists, vectors, strings
|
;; specialists for lists, vectors, strings
|
||||||
(define-structure sequence-specifics sequence-specifics-face
|
(define-structure sequence-specifics sequence-specifics-face
|
||||||
(open srfi-1 ; list procs
|
(open krims ; assert
|
||||||
|
srfi-1+ ; list procs
|
||||||
srfi-13 ; string procs
|
srfi-13 ; string procs
|
||||||
|
let-opt ; let-optionals [ from scsh ]
|
||||||
scheme)
|
scheme)
|
||||||
(files specseqs))
|
(files specseqs))
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
; Copyright (c) 2003 RT Happe <rthappe at web de>
|
; Copyright (c) 2003 RT Happe <rthappe at web de>
|
||||||
; See the file COPYING distributed with the Scheme Untergrund Library
|
; See the file COPYING distributed with the Scheme Untergrund Library
|
||||||
|
|
||||||
;;; sequence procedures for specific types (for lists, actually)
|
;;; some sequence procedures for specific types (for lists, actually)
|
||||||
;;; list-set! sublist list-fill!
|
;;; list-set! sublist list-fill!
|
||||||
|
|
||||||
;; unspecified return value as usual
|
;; unspecified return value as usual
|
||||||
|
@ -12,5 +12,22 @@
|
||||||
(take (drop xs start) (- end start)))
|
(take (drop xs start) (- end start)))
|
||||||
|
|
||||||
;; unspecified return value -- no [start end] for now
|
;; unspecified return value -- no [start end] for now
|
||||||
(define (list-fill! xs x)
|
; (define (list-fill! xs x)
|
||||||
(pair-for-each (lambda (p) (set-car! p x)) xs))
|
; (pair-for-each (lambda (p) (set-car! p x)) xs))
|
||||||
|
|
||||||
|
;; unspecified return value
|
||||||
|
(define (list-fill! xs x . opts)
|
||||||
|
(let-optionals* opts ((start 0 (<= 0 start))
|
||||||
|
;; the default value is only used to make the
|
||||||
|
;; check work. Don't want to compute xs' length.
|
||||||
|
(end start (<= start end) end-supplied?))
|
||||||
|
(let loop ((xs xs) (i 0))
|
||||||
|
(cond ((null? xs)
|
||||||
|
(assert (or (not end-supplied?)
|
||||||
|
(= i end))
|
||||||
|
list-fill!))
|
||||||
|
((< i start)
|
||||||
|
(loop (rest xs) (+ i 1)))
|
||||||
|
((if end-supplied? (< i end) #t)
|
||||||
|
(set-car! xs x)
|
||||||
|
(loop (rest xs) (+ i 1)))))))
|
||||||
|
|
|
@ -6,17 +6,21 @@
|
||||||
|
|
||||||
(define subvector subsequence)
|
(define subvector subsequence)
|
||||||
(define vector-copy sequence-copy)
|
(define vector-copy sequence-copy)
|
||||||
|
(define vector-copy! sequence-copy!)
|
||||||
(define vector-fill! sequence-fill!) ; with opt. start & end
|
(define vector-fill! sequence-fill!) ; with opt. start & end
|
||||||
(define vector-tabulate! sequence-tabulate!)
|
(define vector-tabulate! sequence-tabulate!)
|
||||||
(define vector-append sequence-append)
|
(define vector-append sequence-append)
|
||||||
(define vector-map sequence-map)
|
(define vector-map sequence-map)
|
||||||
|
(define vector-map-into! sequence-map-into!)
|
||||||
(define vector-for-each sequence-for-each)
|
(define vector-for-each sequence-for-each)
|
||||||
(define vector-fold sequence-fold)
|
(define vector-fold sequence-fold)
|
||||||
(define vector-fold-right sequence-fold-right)
|
(define vector-fold-right sequence-fold-right)
|
||||||
|
(define vector-null? sequence-null?)
|
||||||
(define vector-any sequence-any)
|
(define vector-any sequence-any)
|
||||||
(define vector-every sequence-every)
|
(define vector-every sequence-every)
|
||||||
(define vector= sequence=)
|
(define vector= sequence=)
|
||||||
(define vectors-map sequences-map)
|
(define vectors-map sequences-map)
|
||||||
|
(define vectors-map-into! sequences-map-into!)
|
||||||
(define vectors-for-each sequences-for-each)
|
(define vectors-for-each sequences-for-each)
|
||||||
(define vectors-fold sequences-fold)
|
(define vectors-fold sequences-fold)
|
||||||
(define vectors-fold-right sequences-fold-right)
|
(define vectors-fold-right sequences-fold-right)
|
||||||
|
|
Loading…
Reference in New Issue