如何解决为什么闭包是Scala或任何功能性编程语言的一部分
通过定义闭包
Scala闭包是使用一个或多个自由变量的函数,该函数的返回值取决于这些变量。自由变量是在Closure函数之外定义的,不包含在该函数的参数中。
一个纯函数的定义是
纯函数是仅依赖于其声明的输入及其内部算法来生成其输出的函数。它不会从“外部世界”(函数范围之外的世界)中读取任何其他值,并且不会修改外部世界中的任何值。
当函数式编程仅是用纯函数编写代码时,如何在函数式编程中证明像闭包这样的概念
请帮助您清除理解
解决方法
请考虑以下示例
def factorial(n: Int): Int = {
lazy val loop: (Int,Int) => Int =
(i,acc) =>
if (i == n + 1) acc
else loop(i + 1,acc * i)
loop(1,1)
}
这是阶乘的尾递归版本,从1
到n
进行迭代。
从FP的角度来看,此处的所有函数(Scala方法或实际的scala.Function
s)都是纯函数,即在相同的输入上它们返回相同的输出并且没有副作用,可以将它们的调用替换为他们的结果(参照透明度)。
但是loop
是一个闭包取决于外部作用域中的参数(即n
)。
从外部范围读取变量(没有副作用)(与编写相反)不视为副作用。
https://alvinalexander.com/scala/fp-book/definition-of-pure-function/
https://en.wikipedia.org/wiki/Pure_function
https://en.wikipedia.org/wiki/Referential_transparency
What is referential transparency?
https://en.wikipedia.org/wiki/Closure_(computer_programming)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。