纯功能语言?

时间:2017-11-29 06:15:11

标签: data-structures functional-programming

什么是纯函数式语言?什么是纯功能数据结构? 我有点知道什么是功能语言,但我不知道什么是"纯粹的"意思。有谁知道吗? 有人可以向我解释一下吗?谢谢!

2 个答案:

答案 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有一些纯粹的变种。

纯功能数据 =持久数据(即不可变数据)

纯函数 =给定相同的输入始终产生相同的输出,不包含或受副作用的影响。