我有一个javascript项目,我需要能够创建确定性生成器(我称之为Arbitrary
s)。例如,我可以使用以下代码创建任意用户名:
const name = arb.oneOf('Foo', 'Bar', 'Baz');
这导致生成器依次产生3个值,然后退出。但是,我还有一个函数,它可以从多个任意实例中创建元组,如下所示:
const namePairs = arb.tuple(name, name);
这会吐出['Foo', 'Foo']
,['Foo', 'Bar']
等内容。它仍然会确定性地执行此操作,因此每当我遍历namePairs
生成器时,我总会得到相同的价值观。但是,我为实现这一目标而编写的算法并不是很好。它有一些不好的功能,因此它不会生成所有可能的组合,并且在某些情况下它可以两次发出相同的值。这不是一个太大的问题,但我想改进它,但我无法弄清楚如何做到这一点。
基本上,我需要的是一个函数,它采用可变数量的生成器(可以)具有不同的长度并返回具有以下属性的单个生成器:
arb.tuple(allPositiveNumbers, allPositiveNumbers)
我不会将1
作为第一个参数,而将数字增加为第二个参数(或者反过来)。< / LI>
任何关于如何制作这样的东西的提示都会非常感激。