2
multiset/bag 및 Map 각 항목의 발생 횟수를 기록하는 하이브리드로 동작하는 불변의 컬렉션 형식을 만들려고합니다.FSharp에서 불변 TallySet (계산 다중 집합)을 작성하는 방법
아래와 같이 코드로 변경할 수있는 코드를 작성할 수 있으며 맵에서 상속하여 변경할 수없는 글을 작성하려고했지만지도가 봉인되었으므로 오버라이드를 정의 할 수 없습니다.
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