fix sort, improved filter, and fixed another bunch of applications
svn: r7407
This commit is contained in:
parent
22c89205df
commit
beba8aa2d0
|
@ -599,7 +599,7 @@
|
||||||
(cond [(null? list) list]
|
(cond [(null? list) list]
|
||||||
[(not (pair? list))
|
[(not (pair? list))
|
||||||
(error name "not a proper list: ~e" list)]
|
(error name "not a proper list: ~e" list)]
|
||||||
[(= item (car list)) (cdr list)]
|
[(!*app = item (car list)) (cdr list)]
|
||||||
[else (cons (car list) (~ (loop (! (cdr list)))))]))))
|
[else (cons (car list) (~ (loop (! (cdr list)))))]))))
|
||||||
(define* remove
|
(define* remove
|
||||||
(case-lambda [(item list ) (do-remove 'remove item list ~equal?)]
|
(case-lambda [(item list ) (do-remove 'remove item list ~equal?)]
|
||||||
|
@ -613,8 +613,9 @@
|
||||||
(cond [(null? list) list]
|
(cond [(null? list) list]
|
||||||
[(not (pair? list))
|
[(not (pair? list))
|
||||||
(error name "not a proper list: ~e" list)]
|
(error name "not a proper list: ~e" list)]
|
||||||
[else (let ([xs (~ (loop (! (cdr list))))])
|
[else
|
||||||
(if (memf (lambda (item) (= item (car list))) items)
|
(let ([xs (~ (loop (! (cdr list))))])
|
||||||
|
(if (memf (lambda (item) (!*app = item (car list))) items)
|
||||||
xs
|
xs
|
||||||
(cons (car list) xs)))]))))
|
(cons (car list) xs)))]))))
|
||||||
(define* remove*
|
(define* remove*
|
||||||
|
@ -628,7 +629,7 @@
|
||||||
(let loop ([list (! list)])
|
(let loop ([list (! list)])
|
||||||
(cond [(null? list) #f]
|
(cond [(null? list) #f]
|
||||||
[(not (pair? list)) (error 'memf "not a proper list: ~e" list)]
|
[(not (pair? list)) (error 'memf "not a proper list: ~e" list)]
|
||||||
[(pred (! (car list))) list]
|
[(!*app pred (car list)) list]
|
||||||
[else (loop (! (cdr list)))]))))
|
[else (loop (! (cdr list)))]))))
|
||||||
|
|
||||||
(define* (assf pred alist)
|
(define* (assf pred alist)
|
||||||
|
@ -639,20 +640,23 @@
|
||||||
[else (let ([cell (! (car alist))])
|
[else (let ([cell (! (car alist))])
|
||||||
(cond [(not (pair? cell))
|
(cond [(not (pair? cell))
|
||||||
(error 'assf "non-pair found in list: ~e" cell)]
|
(error 'assf "non-pair found in list: ~e" cell)]
|
||||||
[(pred (! (car cell))) cell]
|
[(!*app pred (car cell)) cell]
|
||||||
[else (loop (! (cdr alist)))]))]))))
|
[else (loop (! (cdr alist)))]))]))))
|
||||||
|
|
||||||
(define* (filter pred list)
|
(define* (filter pred list)
|
||||||
|
(let ([pred (! pred)])
|
||||||
(let loop ([list (! list)])
|
(let loop ([list (! list)])
|
||||||
(cond ([null? list] list)
|
(cond [(null? list) list]
|
||||||
([pair? list]
|
[(pair? list)
|
||||||
(let ([x (! (car list))] [xs (~ (loop (! (cdr list))))])
|
(let ([x (car list)]
|
||||||
(if (! (pred x)) (cons x xs) xs)))
|
[xs (~ (loop (! (cdr list))))])
|
||||||
(else (error 'filter "not a proper list: ~e" list)))))
|
(if (!*app pred x) (cons x xs) xs))]
|
||||||
|
[else (error 'filter "not a proper list: ~e" list)]))))
|
||||||
|
|
||||||
(require (rename (lib "list.ss") !sort sort))
|
(require (rename (lib "list.ss") !sort sort))
|
||||||
(define* (sort list less-than)
|
(define* (sort list less?)
|
||||||
(!sort (!list list) (! less-than)))
|
(let ([less? (! less?)])
|
||||||
|
(!sort (!list list) (lambda (x y) (! (!*app less? x y))))))
|
||||||
|
|
||||||
;; --------------------------------------------------------------------------
|
;; --------------------------------------------------------------------------
|
||||||
;; (lib "etc.ss") functionality
|
;; (lib "etc.ss") functionality
|
||||||
|
|
Loading…
Reference in New Issue
Block a user