1
5
这在Python中特别困难。自从
|
2
10
您还需要注释每个系统调用、每个FFI…… 此外,最微小的“泄漏”往往会泄漏到整个代码库中。 这不是一个理论上难以解决的问题,但在实践中,很难做到整个系统不感到脆弱。 顺便说一句,我认为这不是一个好的博士论文;哈斯克尔实际上已经有了这个(版本),有了IO Monad。 我相信很多人会继续在实践中看待这个问题。(胡思乱想)20年后,我们可能会有这种情况。 |
3
4
除了这里的其他优秀答案:您的伪代码只关注函数是否修改变量。但这并不是“纯”的意思。“纯”通常意味着更接近“引用透明”,换句话说,输出完全依赖于输入。所以一些简单的方法,比如读取当前时间并使结果中的一个因素(或者从输入中读取,或者读取机器的状态,或者…)使函数非纯,而不修改任何变量。 此外,还可以编写一个修改变量的“pure”函数。 |
4
3
当我读到你的问题时,首先想到的是。
确定一个变量是否被修改包括挖掘每个方法的行为,这些方法对变量进行调用以确定它是否在变化。这是。。。对于具有非虚拟方法的密封类型,有点直截了当。 但是考虑虚拟方法。必须找到每个派生类型,并验证该方法的每个重写都不会改变状态。在任何允许动态代码生成的语言/框架中,确定这一点都是不可能的,或者只是动态的(如果可能的话,这是非常困难的)。原因是派生类型集不是固定的,因为可以在运行时生成新的派生类型集。 以C为例。没有什么能阻止我在运行时生成一个派生类来重写该虚拟方法并修改状态。静态验证将无法检测这种类型的修改,因此无法验证方法是否是纯的。 |
5
0
我认为主要的问题是如何有效地做到这一点。 D语言有纯函数,但您必须自己指定它们,所以编译器会知道检查它们。我认为如果您手动指定它们,那么就更容易了。 |
6
0
一般来说,决定一个给定函数是否是纯函数可以简化为决定某个给定程序是否会停止——众所周知,停止问题是一种无法有效解决的问题。 |
7
0
请注意,复杂性也取决于语言。对于更动态的语言,可以随时重新定义任何东西。例如,在TCL中
每一块都可以随时修改。例如:
诚然,TCL是一个极端的例子,它是最具活力的语言之一。也就是说,它强调了一个问题,即即使你已经输入函数,也很难确定函数的纯度。 |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |