我有一個列表,其中可能包含比較相等的元素。我想要一個類似的列表,但刪除了一個元素。所以從(:a:b:c:b:d)我想能夠「刪除」一個:b得到(:a:c:b:d)。什麼是慣用的Clojure從列表中的多個「刪除」單個實例?
上下文是一張紙牌遊戲中的牌,其中有兩張標準牌正在玩牌,所以可能有重複牌但仍然一次玩一張。
我有工作代碼,見下文。 Clojure有更多的慣用方法嗎?
(defn remove-one [c left right]
(if (= right())
left
(if (= c (first right))
(concat (reverse left) (rest right))
(remove-one c (cons (first right) left) (rest right)))))
(defn remove-card [c cards]
(remove-one c() cards))
這裏是斯卡拉答案我前一陣子:What is an idiomatic Scala way to "remove" one element from an immutable List?
作爲一個腳註,我查看了這個問題的Scala版本的首選答案的源代碼。事實證明,Scala中的diff函數使用可變哈希來計算要從多集中移除的出現次數。 –
只是爲了澄清:它是重要的:b在這裏算作重複?從示例輸出中,您'丟棄'了第一個:b,但它是否等同於丟棄了第二個:b? [abcbd - > acdb,但是abcd也可以接受?] – monojohnny
@monojohnny,abcd對我的用例來說同樣適用。 –