mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
[utilities] compact sort-and-delete-duplicates
This is still readable IMHO. kons is the result constructor, and adds item to result iff different from previous add.
This commit is contained in:
parent
ff8c5725cd
commit
70cb3a0b97
@ -188,12 +188,8 @@
|
||||
;; uses quicksort internally.
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
(define* (sort-and-delete-duplicates lst < #:optional (= =))
|
||||
(let lp ((lst (sort lst <)) (result '()))
|
||||
(cond
|
||||
((null? lst) '())
|
||||
((null? (cdr lst)) (reverse (cons (car lst) result)))
|
||||
((= (car lst) (cadr lst)) (lp (cdr lst) result))
|
||||
(else (lp (cdr lst) (cons (car lst) result))))))
|
||||
(define (kons a b) (if (and (pair? b) (= a (car b))) b (cons a b)))
|
||||
(reverse (fold kons '() (sort lst <))))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
Loading…
Reference in New Issue
Block a user