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.
|
;; uses quicksort internally.
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
(define* (sort-and-delete-duplicates lst < #:optional (= =))
|
(define* (sort-and-delete-duplicates lst < #:optional (= =))
|
||||||
(let lp ((lst (sort lst <)) (result '()))
|
(define (kons a b) (if (and (pair? b) (= a (car b))) b (cons a b)))
|
||||||
(cond
|
(reverse (fold kons '() (sort lst <))))
|
||||||
((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))))))
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
Loading…
Reference in New Issue
Block a user