2
我試圖創建一個不可變的集合類型,其行爲與multiset/bag和Map的混合編號 相同,它記錄了每個項目的出現次數。如何在FSharp中編寫不可變的TallySet(計數多重集)
我可以用下面的代碼編寫一個可變的代碼,我試圖通過從Map繼承來編寫一個不可變的代碼,但Map被封閉,不會讓我定義任何覆蓋。
type TallySet<'k_t when 'k_t : comparison>() = class
// inherit Map<'k_t, int>
let m_map:((Map<'k_t, int>) ref) = ref (Map.empty)
member x.add item =
m_map :=
match (!m_map).TryFind item with
| None -> (!m_map).Add(item, 1)
| Some n -> (!m_map).Add(item, 1 + n)
!m_map
member x.Count with get() = Map.fold (fun cc k v -> cc + v) 0 !m_map
end
我該寫什麼?
查看[F#中的地圖類型](https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/map.fs)和[相應的簽名文件](https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/map.fsi)將是一個好的開始。請注意,您日常使用的大部分功能都位於地圖模塊中,(略微向下滾動)。 – asibahi