Add range to racket/list.
This commit is contained in:
parent
b323acb999
commit
f420edc5ee
|
@ -31,7 +31,8 @@
|
|||
;; convenience
|
||||
append-map
|
||||
filter-not
|
||||
shuffle)
|
||||
shuffle
|
||||
range)
|
||||
|
||||
(define (first x)
|
||||
(if (and (pair? x) (list? x))
|
||||
|
@ -362,3 +363,14 @@
|
|||
|
||||
(define (argmin f xs) (mk-min < 'argmin f xs))
|
||||
(define (argmax f xs) (mk-min > 'argmax f xs))
|
||||
|
||||
;; similar to in-range, but returns a list
|
||||
(define range
|
||||
(case-lambda
|
||||
[(end) (range 0 end 1)]
|
||||
[(start end) (range start end 1)]
|
||||
[(start end step)
|
||||
(unless (real? start) (raise-type-error 'range "real-number" start))
|
||||
(unless (real? end) (raise-type-error 'range "real-number" end))
|
||||
(unless (real? step) (raise-type-error 'range "real-number" step))
|
||||
(for/list ([i (in-range start end step)]) i)]))
|
||||
|
|
|
@ -1012,6 +1012,22 @@ the result of @racket[proc]. Signals an error on an empty list.
|
|||
(argmax car '((3 pears) (3 oranges)))
|
||||
]}
|
||||
|
||||
@defproc*[([(range [end real?]) list?]
|
||||
[(range [start real?] [end real?] [step real? 1]) list?])]{
|
||||
Returns a list of numbers starting at @racket[start] and whose successive
|
||||
elements are computed by adding @racket[step] to their predecessor until
|
||||
@racket[end] (excluded) is reached.
|
||||
If no starting point is provided, @racket[0] is used. If no @racket[step]
|
||||
argument is provided, @racket[1] is used.
|
||||
@mz-examples[#:eval list-eval
|
||||
(range 10)
|
||||
(range 10 20)
|
||||
(range 20 40 2)
|
||||
(range 20 10 -1)
|
||||
(range 10 15 1.5)
|
||||
]}
|
||||
|
||||
|
||||
@close-eval[list-eval]
|
||||
|
||||
@; ----------------------------------------
|
||||
|
|
|
@ -378,7 +378,23 @@
|
|||
(err/rt-test (argmax (lambda (x) x) (list +i)) (check-regs #rx"argmax" #rx"procedure that returns real numbers"))
|
||||
(err/rt-test (argmax (lambda (x) x) (list)) (check-regs #rx"argmax" #rx"non-empty list")))
|
||||
|
||||
;; ---------- range ----------
|
||||
|
||||
(let ()
|
||||
(test '(0 1 2 3) range 4)
|
||||
(test '() range 0)
|
||||
(test '(0 1 2 3 4 5 6 7) range 8)
|
||||
(test '() range 3 2)
|
||||
(test '(3) range 3 2 -1)
|
||||
(test '(3 4 5 6 7 8) range 3 9)
|
||||
(test '(3 5 7) range 3 9 2)
|
||||
(test '(3 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5) range 3 9 0.5)
|
||||
(test '(9 7 5) range 9 3 -2)
|
||||
(test '(0 1 2 3 4 5 6 7 8 9) range 10)
|
||||
(test '(10 11 12 13 14 15 16 17 18 19) range 10 20)
|
||||
(test '(20 22 24 26 28 30 32 34 36 38) range 20 40 2)
|
||||
(test '(20 19 18 17 16 15 14 13 12 11) range 20 10 -1)
|
||||
(test '(10 11.5 13.0 14.5) range 10 15 1.5))
|
||||
|
||||
;; ---------- check no collisions with srfi/1 ----------
|
||||
(test (void)
|
||||
|
|
Loading…
Reference in New Issue
Block a user