我知道如何讓一個函數刪除所有重複項,但這不是我的問題。我想保留所有獨特的/沒有重複的東西。刪除所有非重複項(球拍)
這將是特別好,如果有人可以在他們的反應使用抽象/高階函數
所以這裏有幾個例子;
'(1 1 1 2 2 2 3 4 5) - >'(3 4 5)
'(1 1 1 2 2 2) - >空
'(2 3 4) - >'(2 3 4)
我知道如何讓一個函數刪除所有重複項,但這不是我的問題。我想保留所有獨特的/沒有重複的東西。刪除所有非重複項(球拍)
這將是特別好,如果有人可以在他們的反應使用抽象/高階函數
所以這裏有幾個例子;
'(1 1 1 2 2 2 3 4 5) - >'(3 4 5)
'(1 1 1 2 2 2) - >空
'(2 3 4) - >'(2 3 4)
這是在Racket中使用bagify
和iterations and comprehensions的慣用的O(n)
解決方案。訣竅是計數多少次在那裏的每一個元素,而只服用那些只有一個:
(define (bagify lst)
(foldl (lambda (key ht)
(hash-update ht key add1 0))
#hash() lst))
(define (non-dups lst)
(for/list ([key+value (in-hash-pairs (bagify lst))]
#:when (= (cdr key+value) 1))
(car key+value)))
例如:
(non-dups '(1 1 1 2 2 2 3 4 5))
=> '(3 4 5)
(non-dups '(1 1 1 2 2 2))
=> '()
(non-dups '(2 3 4))
=> '(2 3 4)
@FateKyougo做了任何答案可以幫助你解決問題嗎?請不要忘記給我們一些反饋;) –
#lang racket
(define (elements xs)
(set->list (list->set xs)))
(define (duplicates xs)
(elements
(for/fold ([xs xs]) ([u (elements xs)])
(remove u xs))))
(define (uniques xs)
(remove* (duplicates xs) xs))
(define (remove-duplicates xs)
(remove* (duplicates xs) xs))
(define (remove-non-duplicates xs)
(remove* (uniques xs) xs))
(define xs '(1 1 1 2 3 4 4))
(uniques xs)
(duplicates xs)
(remove-duplicates xs)
(remove-non-duplicates xs)
輸出:
'(2 3)
'(4 1)
'(2 3)
'(1 1 1 4 4)
複製http://stackoverflow.com/questions/21298989/how-to-remove-all-the-duplicates-in-a-list-using-scheme-only-abstract-list-func – soegaard
@soegaard不是重複 –
http://stackoverflow.com/questions/5751559/how-to-remove-non-duplicate-elements-from-a-list-in-scheme – soegaard