the*_*kip 17 haskell types set
是否有人可以向我解释为什么SetHaskell中没有定义数据类型?
旁注:我只是学习Haskell作为逻辑课程的一部分,其中集合论非常重要,因此在Haskell中使用集合的概念会非常方便.有一个列表并删除重复项(并可能排序)也会产生一个集合,但我很好奇是否有一个特殊的原因,它不是内置的?
Dan*_*ton 28
正如其他答案所示,问题"为什么Haskell中没有Set数据类型?" 被误导:有一个Set数据类型.
如果你想知道为什么Set不是"内置"给Haskell,你可能会问两件事之一.
回答前者,这是因为语言足够强大,可以表达集合的概念,而无需将其烘焙.作为一种高度强调函数式编程的语言,内置了元组和列表的特殊语法,但是像BoolPrelude中定义的简单数据类型.
为了回答后者,再次强调函数式编程,大多数Haskeller倾向于使用列表.列表monad表示非确定性选择,通过允许重复,您可以表示加权选择.
请注意类似的列表推导语法是如何设置表示法的.Set.fromList如有必要,您始终可以使用将列表转换为"真实"集.作为对巴里的呐喊,这与使用Python的set()方法类似; Python也有列表推导.
Zop*_*opa 11
在更哲学的层面上 - 集合的数学概念和Haskell集合实现之间不可能存在严格的对应关系.为什么不?嗯,类型系统,对于初学者.数学集合中可以包含任何内容:{x | x is a positive integer, i < 15}是集合,但也是如此{1, tree, ham sandwich}.在Haskell中,Set a需要保持某种特定类型.将双打和浮动放入同一组中将不会进行类型检查.
正如其他人所说,如果你需要做一些类似集合的事情并且不介意类型限制,Data.Set就存在了.它不在Prelude中,因为列表通常更实用.但实际上,从语言设计的角度来看,将数学集合视为众多数据集中的一种数据类型是没有意义的.集合比这更重要.你没有集合,数字和列表; 你有一组数字和一组列表.递归类型的力量往往掩盖了这种区别,但它仍然是真实的.
但是,在Haskell中有一个位置,我们定义任意集合,然后在这些集合上定义函数.Haskell中集合的数学概念的最接近的类比是类型系统本身.
| 归档时间: |
|
| 查看次数: |
8772 次 |
| 最近记录: |