WJ
unread,Nov 16, 2012, 6:58:11 AM11/16/12You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Tim Bradshaw wrote:
> (defun rd/sorted/simple (list)
> ;; simple version: test is EQL, KEY is IDENTITY
> (if (null list)
> ;; if the list is empty just return it. This means that the code
> ;; below can always assume at least one eltl, and thus avoid
> ;; boundary
> ;; cases.
> '()
> (cons (first list)
> (loop with prev = (first list)
> for curr in list
> unless (eql curr prev)
> collect curr
> and do (setf prev curr)))))
Clojure:
(defn unique-sorted [sorted]
(let [pairs (partition-all 2 1 sorted)]
(for [[x y] pairs :when (not= x y)] x)))
Here's how partition-all works:
user=> (partition-all 2 1 '(a b c d))
((a b) (b c) (c d) (d))
Racket:
(define (unique-sorted sorted)
(define prev sorted)
(for/list ([x sorted] #:unless (equal? x prev))
(set! prev x)
x))