J'essaie de créer un type de collection immuable qui se comporte comme un hybride de multiset/bag et Map qui enregistre le nombre d'occurrences de chaque élément.Comment écrire un TallySet immuable (multiset de comptage) dans FSharp
Je peux écrire un mutable avec du code un peu comme ci-dessous et j'ai essayé d'écrire un fichier immuable en héritant de Map mais Map est scellé et ne me laissera pas définir d'overrides.
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
Que dois-je écrire?
En regardant le code pour le [Type de carte en F #] (https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/map.fs) et le [fichier de signature correspondant ] (https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/map.fsi) serait un bon début. Notez que la plupart des fonctions que vous utiliseriez une utilisation au jour le jour sont dans le module de carte, (faites défiler légèrement vers le bas). – asibahi