作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
将映射视为有限函数的表示,两个或多个变量的映射可以以柯里化(Currying)或非柯里化(Currying)形式给出;即类型Map (a,b) c
和 Map a (Map b c)
是同构的,或接近它的东西。
在这两种表示之间进行选择时,有哪些实际考虑因素——效率等?
最佳答案
Ord
元组的实例使用字典顺序,所以 Map (a, b) c
将按 a
排序首先无论如何,所以整体顺序将是相同的。关于实际考虑:
Data.Map
是一个二叉搜索树在一个键处拆分类似于查找,因此获取给定 a
的子图非 curry 形式不会比 curry 形式贵得多。 a
表示“部分应用程序”,则可以共享表示“部分应用程序”的 curry 形式的嵌套映射。值产生相同的结果。 Map b c
的分享,柯里化(Currying)形式可能会更好。值(value)观。
a
成正比。有值(value)观。另一方面,非柯里化(Currying)形式的元组构造函数开销与键的总数成正比。
a
的任何给定值有三个或更多不同的键使用它,您可能会使用 curried 版本节省内存。当然,对不平衡树的担忧仍然存在。我想得越多,我就越怀疑 curry 形式无疑更好,除非您的 key 非常稀疏且分布不均匀。
foo x = go
where z = expensiveComputation x
go y = doStuff y z
关于Haskell: `Map (a,b) c` 与 `Map a (Map b c)` 对比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613032/
我是一名优秀的程序员,十分优秀!