sequence= etc.

This commit is contained in:
Rolf-Thomas Happe 2003-03-13 18:38:28 +00:00
parent 7e87daaa4d
commit 85539d1d46
5 changed files with 76 additions and 28 deletions

View File

@ -18,7 +18,7 @@ the basic sequence operation names bound to the corresponding vector
procedures. The library is neither complete nor tweaked nor tested procedures. The library is neither complete nor tweaked nor tested
sytematically. (The idea to recycle parts of the srfi-13 code came sytematically. (The idea to recycle parts of the srfi-13 code came
too late.) It contains the folllowing procedures, arranged in too late.) It contains the folllowing procedures, arranged in
columns=structures and `* categories' from SRFI-13. columns=structures and `* categories' from SRFI-13 and -1.
VECTOR-LIB SEQUENCE-LIB ABSEQUENCES, also SL VECTOR-LIB SEQUENCE-LIB ABSEQUENCES, also SL
@ -31,6 +31,10 @@ vector-any sequence-any
[ versions with >1 sequence but no optional start & end parameters ] [ 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=
[ >=0 sequence args, no start & end parameters ]
vectors= sequences=
* Constructors * Constructors
make-vector make-another-sequence make-absequence/behavior make-vector make-another-sequence make-absequence/behavior
@ -133,6 +137,7 @@ 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=)
* Predicates * Predicates
@ -177,6 +182,24 @@ n := min.k sequence-length sk.
* *
(vector= elt= s0 s1 [start0 end0 start1 end1]) --> b
(sequence= elt= s0 s1 [start0 end0 start1 end1]) --> b
Synopsis: Return boolean(S0 and S1 represent the same sequence), i.e.
B = (and (elt= s0[start0] s1[start1]) ...)
[ deviates from STRING= in SRFI-13 due to ELT= parameter ]
*
(vectors= elt= s0 ...) --> b
(sequences= elt= s0 ...) --> b
Synopsis: Return B = boolean(S0, ... represent the same sequence), i.e.
B = #t given <2 sequence args, and
= (and[k=0,...) (sequence= elt= s(k) s(k+1))) otherwise.
*
Constructors Constructors
(make-vector len [fill]) --> s (make-vector len [fill]) --> s

View File

@ -135,6 +135,9 @@
(define sequences-fold-right contiguous-sequences-fold-right) (define sequences-fold-right contiguous-sequences-fold-right)
(define sequences-any contiguous-sequences-any) (define sequences-any contiguous-sequences-any)
(define sequences-every contiguous-sequences-every) (define sequences-every contiguous-sequences-every)
(define sequence= contiguous-sequence=)
(define sequences= contiguous-sequences=)
;; the MAKER parameter works only with general sequences ;; the MAKER parameter works only with general sequences
(define sequence-copy/maker contiguous-sequence-copy/maker) (define sequence-copy/maker contiguous-sequence-copy/maker)
(define sequence-map/maker contiguous-sequence-map/maker) (define sequence-map/maker contiguous-sequence-map/maker)

View File

@ -18,6 +18,7 @@
;;; sequence-fold-right sequence-fold-right ;;; sequence-fold-right sequence-fold-right
;;; sequence-any sequences-any ;;; sequence-any sequences-any
;;; sequence-every sequences-every ;;; sequence-every sequences-every
;;; sequence= sequences=
(define (id x) x) (define (id x) x)
@ -218,10 +219,25 @@
(else #f)))))) (else #f))))))
(define (sequence= elt= s0 s1 . opts)
(assert (procedure? elt=))
(let-optionals opts ((start0 0) (end0 (sequence-length s0))
(start1 0) (end1 (sequence-length s1)))
(and (= (- end0 start0)
(- end1 start1))
(let loop ((i0 start0) (i1 start1))
(cond ((= i0 end0) #t)
((elt= (sequence-ref s0 i0)
(sequence-ref s1 i1))
(loop (+ i0 1) (+ i1 1)))
(else #f))))))
(define (sequences= elt= . seqs)
(assert (procedure? elt=))
(if (null? seqs) #t
(let loop ((s (first seqs)) (ss (rest seqs)))
(cond ((null? ss) #t)
((sequence= elt= s (first ss))
(loop (first ss) (rest ss)))
(else #f)))))

View File

@ -23,7 +23,9 @@
sequence-fold sequences-fold sequence-fold sequences-fold
sequence-fold-right sequences-fold-right sequence-fold-right sequences-fold-right
sequence-any sequences-any sequence-any sequences-any
sequence-every sequences-every)) sequence-every sequences-every
sequence= sequences=
))
;; specialised sequence operations (for lists, actually) ;; specialised sequence operations (for lists, actually)
(define-interface sequence-specifics-face (define-interface sequence-specifics-face
@ -71,11 +73,13 @@
vector-fold-right vector-fold-right
vector-any vector-any
vector-every vector-every
vector=
vectors-map ; but not vectors-map/maker vectors-map ; but not vectors-map/maker
vectors-for-each vectors-for-each
vectors-fold vectors-fold
vectors-fold-right vectors-fold-right
vectors-any vectors-any
vectors-every vectors-every
vectors=
)) ))

View File

@ -35,7 +35,7 @@
(open sequence-basics (open sequence-basics
krims ; assert krims ; assert
util ; unspecific util ; unspecific
srfi-1 ; append! srfi-1+ ; append! rest
srfi-23 ; error srfi-23 ; error
let-opt ; let-optionals [ from scsh ] let-opt ; let-optionals [ from scsh ]
scheme) scheme)
@ -71,12 +71,14 @@
(define vector-fold-right sequence-fold-right) (define vector-fold-right sequence-fold-right)
(define vector-any sequence-any) (define vector-any sequence-any)
(define vector-every sequence-every) (define vector-every sequence-every)
(define vector= sequence=)
(define vectors-map sequences-map) (define vectors-map sequences-map)
(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)
(define vectors-any sequences-any) (define vectors-any sequences-any)
(define vectors-every sequences-every) (define vectors-every sequences-every)
(define vectors= sequences=)
(define (list->vector xs . opts) (define (list->vector xs . opts)
(let-optionals opts ((start 0) (end (length xs))) (let-optionals opts ((start 0) (end (length xs)))
(assert (<= 0 start end)) (assert (<= 0 start end))