J C*_*per 6 functional-programming nested side-effects
我正在学习函数式编程,并尝试以函数式方式解决几个问题.在将问题分解为函数时,我经历过的一件事是,似乎我有两个选择:使用具有相似参数列表的几个不同的函数,或者使用嵌套函数,作为闭包,它们可以简单地引用父函数中的绑定.
虽然我最终采用第二种方法,因为它使函数调用更小并且似乎"感觉"更好,从我的阅读中看起来似乎我可能缺少函数式编程的一个要点,因为这似乎是"侧面" -effecty"?现在被授予,这些嵌套函数不能修改外部绑定,因为我使用的语言阻止了它,但是如果你看一下每个单独的内部函数,你不能说"给定相同的参数,这个函数将返回相同的结果"因为他们确实使用了父范围内的变量......我是对的吗?
什么是理想的进行方式?
谢谢!
嵌套函数是在许多函数中分工的绝佳方法。这并不是真正的“副作用”;而是“副作用”。如果有帮助,请将捕获的变量视为隐式参数。
嵌套函数有用的一个例子是替换循环。嵌套函数的参数可以充当累加值的归纳变量。一个简单的例子:
let factorial n =
let rec facHelper p n =
if n = 1 then p else facHelper (p*n) (n-1)
in
facHelper 1 n
Run Code Online (Sandbox Code Playgroud)
在这种情况下,像全局一样声明一个函数实际上没有意义facHelper,因为用户不必担心p参数。
但请注意,单独测试嵌套函数可能很困难,因为无法在其父级之外引用它们。