我来自一个势在必行的背景,并且最近开始深入研究函数式编程。我对纯函数的一个概念感到困惑。根据我的理解,纯函数是一个函数,它总是在给定相同输入的情况下评估相同的结果,并且也是一个没有副作用的函数。
我的困惑源于在函数内部使用函数。如果我有两个函数(伪代码):
function foo(x) { return x+1; }
function bar(x) { return foo(x); }
bar
依靠外部函数foo
来计算其结果。这会导致bar
不纯吗?如果是这样,怎么能用纯函数编写程序?是否必须将一组实用函数作为参数传递(例如count()或map()等)?我觉得我对功能编程的一个重要方面有很大的误解。
谢谢!
答案 0 :(得分:0)
不是真的。使功能不纯的是副作用。如果函数将信息泄漏到调用者以外的其他位置,或者从调用者以外的其他位置检索信息。
作为副作用的示例,您可以从键盘或文件中读取并打印或存储到文件。另一个可能是在函数内部存储状态。例如。一个柜台。这会计算你调用它的次数。如果它是局部的或全局的那么无关紧要,所以任何变量都是副作用。任何这都会使功能不纯。
通常,您永远无法使您的程序100%正常运行。您需要以某种方式使用输入的小脏东京(或者每次运行时计算完全相同)以及显示结果的某种方式(或者为什么要在第一时间运行它...除非您使用priogram头你的公寓,如果你有副作用,它再次不纯净)