【发布时间】:2015-06-03 08:26:42
【问题描述】:
我在这里有一个我正在努力解决的任务:
type multimap<'a,'b when 'a:comparison and 'b:comparison> = MMap of Map<'a, list<'b>>
作业指出
我们将多图的规范表示定义为 值列表是有序的。 声明一个函数
canonical: multimap<'a,'b> -> multimap<'a,'b> when 'a : comparison and 'b : comparison其中canonical m返回m的规范表示。
现在我有:
let toOrderedList (mm:multimap<'a,'b>) =
match mm with
| MMap m ->
我不知道如何对此进行模式匹配。有什么帮助吗? :3
【问题讨论】:
-
除此之外,如果您使用参数进行解构,您可以稍微缩短您的功能:
let toOrderedList (MMap m) = ... -
... 顺便说一句:提示对 pattern-match 没有帮助-因为您已经这样做了(您的
m是Map<'a, 'b list>)-剩下的就是将键后面的所有列表带入 order (...对它们进行排序) - 现在你当然不能改变那些Maps<...>- 所以你必须map完整的结构。 ..现在看看提示... -
我在看作业时非常怀疑,因为我自己不知道如何正确解决这个问题。
-
type-alias 只是一个别名 - 使用它您可以将
MMap设为私有并发布一个智能构造函数(例如,就像let create = MMap >> cannonical一样,您只能构造 cannonicalmultimaps 的表示
标签: f#