我剛開始學習Clojure的和函數式編程,我有困難的時候試圖執行以下任務:的Clojure - 內環路取下載體項目
我有這樣的向量的向量[AB] [ac] [bc] [cd] [db]]。我需要遍歷它,刪除已經出現在第二列上的第二列上出現的項目。例如項目[b c]和[d b](因爲c和b已經出現在第二列)。我設法得到一個函數,可以刪除一個項目,但是我需要遍歷每個項目的向量來檢查和刪除項目。我怎樣才能做到這一點?我想過使用遞歸來實現這一點,但每次嘗試都以失敗告終。對不起,如果這是一個微不足道的問題,但我堅持這一點。
例如
輸入: [[AB] [AC] [BC]苯並[cd] [AD] [被]]
輸出繼電器(預期): [[AB] [ AC] [CD] [是]
移除的項目: [BC] [廣告]
正如你所看到的,c和d已經出現在之前的項目[交流]和[ cd]分別,所以我必須刪除項目[b c]和[a d]。
到目前爲止,我有以下的代碼
該函數返回被刪除項目的載體。在我們的場景中,它返回向量[BC] [廣告]
(defn find-invalid [collection-data item-to-check]
(subvec (vec (filter #(= (second %) item-to-check) collection-data)) 1))
(defn find-invalid [collection-data item-to-check]
(subvec (vec (filter #(= (second %) item-to-check) collection-data)) 1))
這等功能由項目
(defn remove-invalid [collection-data item-position]
(vec (concat (subvec collection-data 0 item-position) (subvec collection-data (inc item-position)))))
的給定索引中刪除從原來的向量一次一個項目這最後一個功能是我做的測試這個邏輯
(defn remove-invalid [original-collection ]
(dorun (for [item original-collection]
[
(dorun (for [invalid-item (find-invalid original-collection (second item))]
[
(cond (> (count invalid-item) 0)
(println (remove-invalid original-collection (.indexOf original-collection invalid-item)))
)
]))
])))
我覺得遞歸可以解決我的問題,但我希望得到任何幫助,以弄完:)。
在此先感謝。
很好的問題。我相信一個clojure專業人士會來拯救=] – sova