Add in-slice sequences.
Patch from David Vanderson.
This commit is contained in:
parent
a122ea725d
commit
664245ae69
15
collects/tests/unstable/sequence.rkt
Normal file
15
collects/tests/unstable/sequence.rkt
Normal file
|
@ -0,0 +1,15 @@
|
|||
#lang racket/base
|
||||
|
||||
(require rackunit rackunit/text-ui unstable/sequence)
|
||||
|
||||
(run-tests
|
||||
(test-suite "sequence.rkt"
|
||||
(check-true (sequence? (in-slice 1 '())))
|
||||
(check-equal? '() (for/list ([v (in-slice 1 '())]) v))
|
||||
(check-equal? '((0 1)) (for/list ([v (in-slice 3 (in-range 2))]) v))
|
||||
(check-equal? '((0 1 2) (3 4 5))
|
||||
(for/list ([v (in-slice 3 (in-range 6))]) v))
|
||||
(check-equal? '((0 1 2) (3 4 5) (6 7))
|
||||
(for/list ([v (in-slice 3 (in-range 8))]) v))
|
||||
(check-exn exn:fail:contract?
|
||||
(lambda () (for/list ([x (in-slice 0 (in-range 8))]) x)))))
|
|
@ -43,4 +43,18 @@ Produces the sequence of @racket[f] applied to each element of @racket[seq].
|
|||
x)]
|
||||
}
|
||||
|
||||
|
||||
@addition{David Vanderson}
|
||||
|
||||
@defproc[(in-slice [length exact-positive-integer?] [seq sequence?])
|
||||
sequence?]{
|
||||
Returns a sequence where each element is a list with @racket[length]
|
||||
elements from the given sequence.
|
||||
|
||||
@examples[#:eval the-eval
|
||||
(for/list ([e (in-slice 3 (in-range 8))]) e)
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@close-eval[the-eval]
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
#lang racket/base
|
||||
|
||||
(require (for-syntax racket/base))
|
||||
(require (for-syntax racket/base) racket/contract/base)
|
||||
|
||||
;; Added by samth:
|
||||
|
||||
(provide in-syntax in-pairs in-sequence-forever sequence-lift)
|
||||
|
||||
(define-sequence-syntax in-syntax
|
||||
(define-sequence-syntax in-syntax
|
||||
(lambda () #'(lambda (e) (in-list (syntax->list e))))
|
||||
(lambda (stx)
|
||||
(syntax-case stx ()
|
||||
|
@ -43,3 +45,25 @@
|
|||
(lambda (_) (more?))
|
||||
(lambda _ #t)
|
||||
(lambda _ #t))))))
|
||||
|
||||
|
||||
;; Added by stamourv (from David Vanderson (david.vanderson at gmail.com)):
|
||||
|
||||
(provide/contract
|
||||
[in-slice (exact-positive-integer? any/c . -> . any)])
|
||||
|
||||
(define (in-slice k seq)
|
||||
(unless (sequence? seq) (raise-type-error 'in-slice "sequence" seq))
|
||||
(make-do-sequence
|
||||
(lambda ()
|
||||
(define-values (more? get) (sequence-generate seq))
|
||||
(values
|
||||
(lambda (_)
|
||||
(for/list ((i k)
|
||||
#:when (more?))
|
||||
(get)))
|
||||
values
|
||||
#f
|
||||
#f
|
||||
(lambda (val) (0 . < . (length val)))
|
||||
#f))))
|
||||
|
|
Loading…
Reference in New Issue
Block a user