纯功能定义为以下功能:
考虑一个函数,该函数通过随机采样介于1和两个数字中的最小值之间的整数,并确定采样的整数是否除以两个给定的整数,来计算两个正整数的最大公约数。当访问完所有整数后,该函数将返回采样率最高的整数。假设使用的随机数生成器是统一的。
直观上,在我看来,此函数是 pure ,尽管其计算是不确定的。它为相同的参数产生相同的值,并且不会产生任何副作用。我能想到的唯一可能的“副作用”是,在输入足够大的情况下,计算可能会永远进行下去。我可以正确标记此功能 pure 吗?
答案 0 :(得分:3)
不,我不这么认为。
对于随机数生成器,有两种可能性:
这是伪RNG。这意味着它具有N位状态,并且每次生成新的随机数时,该状态都会更新。因此有一个副作用-RNG状态发生变化。
一个真正的随机生成器,它从熵源中提取随机位。再次,该池将被使用并且可能已耗尽-这是一个非纯函数的征兆。
答案 1 :(得分:1)
“随机数生成器”不能是纯函数,除非它需要生成一个看起来随机数的所有信息预先传递给它。如果生成器使用其他任何东西(例如系统时钟或文件系统),则生成器将不是纯粹的。例如,纯函数包括:
请参阅我的“ Designs for PRNGs”部分。