78得票7回答
纯度 vs 引用透明度

这些术语似乎有不同的定义,但我一直认为其中一个暗示另一个;我无法想到任何情况下表达式是引用透明但不是纯的,或者反之亦然。 维基百科为这些概念维护了不同的文章,并指出: 来自引用透明性: 如果表达式中涉及的所有函数都是纯函数,则该表达式是引用透明的。此外,一些不纯函数可以包含在表达式...

62得票5回答
纯函数式数据结构有什么好处?

有很多关于数据结构的文本以及数据结构代码的库。我知道纯函数式数据结构更容易推理。然而,我不明白在实际编程中(无论是使用函数式编程语言还是其他编程语言)使用纯函数式数据结构相比命令式对应物的真正优势是什么。是否有人能提供一些真实世界的例子,说明纯函数式数据结构的优点以及原因? 例如,我在编程语...

48得票6回答
为什么纯函数式语言不使用引用计数?

在纯函数式语言中,数据是不可变的。使用引用计数时,创建一个引用循环需要更改已经创建的数据。看起来纯函数式语言可以使用引用计数而不必担心可能会出现循环引用。这是对的吗?如果是,为什么它们没有使用引用计数? 我知道在许多情况下,引用计数比GC慢,但至少它减少了暂停时间。在暂停时间较长的情况下,有...

47得票2回答
为什么捕获异常是非纯的,但是抛出异常是纯的?

Haskell 中,您可以从纯功能代码中抛出异常,但只能在 IO 代码中捕获。 为什么? 您能在其他上下文中捕获异常吗,还是只能在 IO monad 中捕获? 其他纯函数式语言如何处理这个问题?

46得票6回答
学习Haskell以便学习Scala

我已经阅读了一些关于Scala和Haskell的问题,讨论了两种语言的优点或者应该学习哪一种,但是我已经知道我想要学习Scala。我在大学是Java程序员,现在主要使用PHP。 我希望学习Scala,因为它看起来比Java更好用,适合我的个人项目,而且我也想学习一门函数式编程语言,以提高作为...

41得票5回答
为什么“纯函数”被称为“纯函数”?

纯函数指的是没有副作用的函数,它不能执行任何形式的I/O操作并且不能修改任何状态,并且具有引用透明性——使用相同输入多次调用函数时,始终产生相同的输出。 为什么使用“纯”一词来描述具有这些属性的函数?谁最先使用“纯”这个词,并且是在什么时候使用的?是否有其他意思大致相同的词语?

40得票9回答
纯函数式编程语言中高效堆的实现

作为Haskell练习,我正尝试实现堆排序。在命令式语言中,堆通常是以数组形式实现的,但在纯函数式语言中,这种方式会非常低效。因此,我研究了二叉堆,但是到目前为止,我找到的所有资料都是从命令式视角描述它们,所呈现的算法难以转换为函数式环境。如何在像Haskell这样的纯函数式语言中高效地实现堆...

39得票3回答
拥有一个 `(a -> b) -> b` 是否等同于拥有一个 `a`?(涉及IT技术)

在一个纯函数式语言中,你只能对一个值应用一个函数。 换句话说,如果你想对类型为a的值进行任何有趣的操作,你需要一个类型为f::a->b的函数(例如),然后将其应用。如果有人给你一个类型为(a->b)->b的(flip apply)a,这是a的合适替代品吗? 那么,你会如何称呼类型为(a->...

31得票3回答
一个类似于`ST`的monad能否在没有`ST`库的情况下纯执行?

这篇文章是关于Literate Haskell的。只需要像“pad.lhs”这样将其放在文件中,ghci 就可以运行它。> {-# LANGUAGE GADTs, Rank2Types #-} > import Control.Monad > import Control.M...

29得票4回答
Clojure: 如何用符合Clojure风格的方式处理java.util.HashMap?

我有一个java.util.HashMap对象m(从Java代码中返回的值),我想得到一个新的映射,其中包含一个额外的键值对。 如果m是Clojure映射,我可以使用以下代码:(assoc m "key" "value") 但是在 HashMap 上尝试这样做会得到以下结果: jav...