1

HTDP(如何设计程序)的第 36.4 章中

我发现了这个警告:

警告:状态变量绝不是函数的参数。

但据我之前听说过,在函数式编程中,如果函数引用状态变量,它们就会被破坏。它们将不再是纯函数。它们将很难测试,做不可预测的工作,无法记忆......等等。状态变量也应该作为参数传递,而不仅仅是一些全局常量。

所以我想知道

  • HTDP 是不是在争论有什么问题,
  • 在某些函数式编程实践中,是否允许全局状态变量?或者
  • 我有错误的想法?

提前致谢。

免责声明:我非常喜欢和尊重这本书并且学到了很多东西。其实我想把这本书的好话传播给我的朋友(如果有的话)。所以不要误会。

4

1 回答 1

2

我认为与您所听到的有关函数式编程的内容以及您链接的章节中所写的内容没有任何不相容的地方。但是,您在这里混淆了两个概念:函数程序中可变状态的存在(纯度问题)与评估事物的顺序,以及对可用于写下事物的语法的限制。

考虑一下:如果您正在使用急切的评估策略,那么传递他们在该章中描述的那种“状态变量”将具有取消引用它的效果,并且您将获得变量的作为函数参数。同样,如果将变量作为参数绑定到函数,则每次调用都会获得不同的内存。这里有很多不同的选择。某些语言允许您将引用作为值传递这一事实并不普遍。

所以它们实际上只是描述全局变量(或从某个父范围访问的变量),就其本质而言,它们不需要作为参数传递给函数。如果特定语言允许通过引用传递,这可能不是那么明显的区别。

于 2013-11-15T08:28:30.917 回答