【发布时间】:2019-07-04 23:52:23
【问题描述】:
纯函数定义为:
- 为相同的参数返回相同的值,并且
- 不会产生任何副作用(非局部变量的变异、I/O 操作等)
考虑一个函数,该函数通过随机采样介于 1 和两个数字中的最小值之间的整数,并确定采样的整数是否除以两个给定整数,从而计算两个正整数的最大公约数。当所有整数都被访问时,该函数返回最高采样整数。假设使用的随机数生成器是统一的。
直观地说,在我看来,这个函数是纯的,尽管它的计算是不确定的。它为相同的参数产生相同的值,并且不会产生任何副作用。我能想到的唯一可能的“副作用”是,如果输入足够大,计算有可能永远持续下去。我对这个函数的标记是否正确 pure?
【问题讨论】:
-
只有为函数创建一个新的随机生成器,由非随机种子播种,然后丢弃它,这使得它实际上是非随机的,它才是纯粹的。 (如果您使用随机种子,则会影响外部随机源)。
-
确实满足1,但如果使用外部RNG则不满足2。
-
函数如何知道“何时所有整数都已被访问”?还是只是未指明?
标签: random functional-programming deterministic purely-functional