什么是纯函数式语言?什么是纯功能数据结构? 我有点知道什么是功能语言,但我不知道什么是"纯粹的"意思。有谁知道吗? 有人可以向我解释一下吗?谢谢!
答案 0 :(得分:2)
当函数式程序员引用 pure 函数的概念时,它们指的是referential transparency的概念。
参考透明度实际上是关于值替换而不改变程序的行为。
考虑一些将2添加到数字的函数:
let add2 x = x + 2
程序中对add2 2
的任何调用都可以用值4
替换,而不会改变任何行为。
现在考虑我们将print
投入混音:
let add2 x =
print x
x + 2
此函数仍然返回与前一个函数相同的结果,但我们无法在不更改程序行为的情况下执行值替换,因为add2 2
具有向屏幕打印2
的副作用。
现在我们对纯函数有一个很好的定义,我们可以将纯函数式语言定义为一种语言,我们几乎只使用纯函数。
注意:仍然可以用纯函数语言执行效果(例如打印到控制台),但这可以通过将效果视为值来完成表示要执行的操作,而不是某些功能中的副作用。然后将这些效果值组合成一组更大的程序行为。
纯功能数据结构只是一种数据结构,旨在从纯函数语言中使用。
由于使用函数改变数据结构会破坏此引用透明性属性,因此每次我们需要返回一个新的数据结构。添加或删除元素。
我们可以有效地执行此类特定类型的数据结构,从先前副本共享大量内存:单链接列表和各种基于树的结构是最常见的示例,但还有许多其他。
答案 1 :(得分:-2)
目前使用的大多数功能语言并不纯粹,因为它们提供了与现实世界交互的方式。很久以前,例如,Haskell有一些纯粹的变种。
纯功能数据 =持久数据(即不可变数据)
纯函数 =给定相同的输入始终产生相同的输出,不包含或受副作用的影响。