Move remf from unstable/list to racket/list.
Add remf* for consistency.
This commit is contained in:
parent
c0408de912
commit
952df81877
|
@ -1312,6 +1312,32 @@ Computes the n-ary cartesian product of the given lists.
|
|||
]
|
||||
}
|
||||
|
||||
@defproc[(remf [pred procedure?]
|
||||
[lst list?])
|
||||
list?]{
|
||||
Returns a list that is like @racket[lst], omitting the first element of @racket[lst]
|
||||
for which @racket[pred] produces a true value.
|
||||
|
||||
@defexamples[
|
||||
#:eval list-eval
|
||||
(remf negative? '(1 -2 3 4 -5))
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
@defproc[(remf* [pred procedure?]
|
||||
[lst list?])
|
||||
list?]{
|
||||
Like @racket[remf], but removes all the elements for which @racket[pred]
|
||||
produces a true value.
|
||||
|
||||
@defexamples[
|
||||
#:eval list-eval
|
||||
(remf* negative? '(1 -2 3 4 -5))
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
|
||||
@close-eval[list-eval]
|
||||
|
||||
|
|
|
@ -616,4 +616,15 @@
|
|||
(test '((1 2) (3 4) (4 3)) split*-list '(1 2 3 4) '(1 2 4 3) =)
|
||||
(err/rt-test (split*-list '() '() #f))
|
||||
|
||||
;; ---------- remf / remf* ----------
|
||||
|
||||
(test '() remf positive? '())
|
||||
(test '(-2 3 4 -5) remf positive? '(1 -2 3 4 -5))
|
||||
(test '(1 3 4 -5) remf even? '(1 -2 3 4 -5))
|
||||
(test '(1 -2 3 4 -5) remf (λ (x) #f) '(1 -2 3 4 -5))
|
||||
(test '() remf* positive? '())
|
||||
(test '(-2 -5) remf* positive? '(1 -2 3 4 -5))
|
||||
(test '(1 3 -5) remf* even? '(1 -2 3 4 -5))
|
||||
(test '(1 -2 3 4 -5) remf* (λ (x) #f) '(1 -2 3 4 -5))
|
||||
|
||||
(report-errs)
|
||||
|
|
|
@ -50,7 +50,9 @@
|
|||
argmin
|
||||
argmax
|
||||
group-by
|
||||
cartesian-product)
|
||||
cartesian-product
|
||||
remf
|
||||
remf*)
|
||||
|
||||
(define (first x)
|
||||
(if (and (pair? x) (list? x))
|
||||
|
@ -747,3 +749,27 @@
|
|||
(define (cp-2 as bs)
|
||||
(for*/list ([i (in-list as)] [j (in-list bs)]) (cons i j)))
|
||||
(foldr cp-2 (list (list)) ls))
|
||||
|
||||
(define (remf f ls)
|
||||
(unless (list? ls)
|
||||
(raise-argument-error 'remf "list?" ls))
|
||||
(unless (and (procedure? f)
|
||||
(procedure-arity-includes? f 1))
|
||||
(raise-argument-error 'remf "(-> any/c any/c)" f))
|
||||
(cond [(null? ls) '()]
|
||||
[(f (car ls)) (cdr ls)]
|
||||
[else
|
||||
(cons (car ls)
|
||||
(remf f (cdr ls)))]))
|
||||
|
||||
(define (remf* f ls)
|
||||
(unless (list? ls)
|
||||
(raise-argument-error 'remf* "list?" ls))
|
||||
(unless (and (procedure? f)
|
||||
(procedure-arity-includes? f 1))
|
||||
(raise-argument-error 'remf* "(-> any/c any/c)" f))
|
||||
(cond [(null? ls) '()]
|
||||
[(f (car ls)) (remf* f (cdr ls))]
|
||||
[else
|
||||
(cons (car ls)
|
||||
(remf* f (cdr ls)))]))
|
||||
|
|
Loading…
Reference in New Issue
Block a user