在Chapter 36.4 of HTDP(How to Design Programs),
我发现了这个警告:
警告:状态变量绝不是函数的参数。
但据我之前所知,在函数式编程中,如果函数引用状态变量,函数将会被破坏。它们将不再是纯粹的功能。它们很难测试,做不可预测的工作,无法记忆......等等。状态变量也应该作为参数传递,而不仅仅是作为一些全局常量引用。
所以我想知道
提前致谢。
免责声明:我非常喜欢和尊重这本书,并且学到了很多东西。其实我想把这本书的好话传播给我的朋友(如果有的话)。所以不要弄错。
答案 0 :(得分:2)
我认为与你所听到的关于函数式编程的内容以及你所链接的章节中所写的内容有什么不相符。但是,你在这里混淆了两个概念:功能程序中存在可变状态(纯度问题)与评估事物的顺序,以及对可用语法的限制把事情写下来。
考虑一下:如果您正在使用急切的评估策略,那么传递他们在该章中描述的那种“状态变量”会产生解除引用它的效果,并且您将获得值作为函数参数的变量。类似地,如果变量被绑定为函数的参数,则每次调用时都会得到不同的位内存。这里有很多不同的选择。某些语言允许您将引用作为值传递的事实并不普遍。
所以它们实际上只是描述全局变量(或从某个父作用域访问的变量),它们本质上不需要作为参数传递给函数。如果特定语言允许通过引用传递,则可能没有这么明显的区别。