Data structures 某些数据结构是否比其他数据结构更适合函数式编程?
在中,有一个标题为“没有数组或哈希表的生活”的部分,作者建议在函数式编程中优先使用列表和树,而在命令式程序中可以使用数组或哈希表 这是有意义的,因为在创建新列表或树时重用(不可变)列表或树的一部分比使用数组要容易得多 因此,我的问题是:Data structures 某些数据结构是否比其他数据结构更适合函数式编程?,data-structures,functional-programming,immutability,Data Structures,Functional Programming,Immutability,在中,有一个标题为“没有数组或哈希表的生活”的部分,作者建议在函数式编程中优先使用列表和树,而在命令式程序中可以使用数组或哈希表 这是有意义的,因为在创建新列表或树时重用(不可变)列表或树的一部分比使用数组要容易得多 因此,我的问题是: 在函数式编程和命令式编程之间,数据结构的使用模式是否真的存在显著差异 如果是,这是一个问题吗 如果您确实需要某个应用程序的哈希表,该怎么办?你会简单地承担修改所产生的额外费用吗 函数式程序倾向于更加强调递归。这反过来又建议使用递归算法和递归数据结构。列表和树都
- 在函数式编程和命令式编程之间,数据结构的使用模式是否真的存在显著差异
- 如果是,这是一个问题吗
- 如果您确实需要某个应用程序的哈希表,该怎么办?你会简单地承担修改所产生的额外费用吗
如果你想在一个算法上花费额外的费用,你可能需要重新考虑。为什么哈希表(对于非递归算法是O(1))会产生额外的开销?与树或列表相比,使用它有什么好处?是的,主要区别是数据的不可变性,其中可能包括代码(请参见高阶函数)。有关常用数据类型和用法的列表,请参见上的Wikipedia页面。这是否是一个问题取决于你如何看待它。如果函数式语言适合您正在处理的任务类型,那么它有许多优点。哈希表是一种关联数组,但它不是函数式语言中要使用的数组,因为在插入时必须进行重新灰化,而且没有数组时性能很差。相反,请尝试使用关联数组。
- 对。通常,元组、列表和部分求值函数是函数式编程语言中非常常见的数据结构。可变数据结构,如数组和(实)哈希表,使用较少,因为它们不适合Haskell。SML(也是功能性的,但不是惰性的)可以比Haskell更自然地使用数组,但列表仍然更常见,因为它们可以很好地映射到递归算法
- 我不知道怎么回答这个问题。谁的问题
- 存在关联数组(“哈希表”等价物)的实现,即使在不同的更新之后,它们也可以继续共享它们的大部分底层结构。我相信GHC的
;此外,它还有许多惰性/功能友好的数据结构Data.Map
至于真正需要一个哈希表,当你搜索二十个元素时,O(LG n)查找只比O(1)查找慢了一百万倍。
- 数据的使用模式真的有很大不同吗 功能与功能之间的结构 命令式编程
- 如果是,这是一个问题吗
- 如果您确实需要某个应用程序的哈希表,该怎么办?你…吗 把额外的费用吞下去 修改的费用
最好用的东西 是的,使用模式有很大的不同,但这不是问题。如果您想要一个哈希表,通常意味着您想要一个具有字符串键和快速访问的有限映射。Bentley和Sedgewick的是纯功能的,至少在某些情况下,它们的性能优于哈希表
如上所述,Chris Okasaki关于纯功能数据结构的书非常好。作为一个多年从事OO的人,最近正在构建一个需要大量速度(实时)的大型项目