【发布时间】:2019-03-23 05:52:59
【问题描述】:
对于给定的谓词pred : 'a list -> bool 和生成器gen : Gen<'a>,考虑以下满足谓词的格式良好的列表生成器:
let wellFormedList pred gen =
Gen.ofList gen
|> Gen.filter pred
正如FsCheck manual 中提到的,谓词应该很有可能适用于随机列表。 不幸的是,这个假设不适用于我的情况。因此,我需要为满足谓词的列表定义一个自定义生成器。
如何定义一个从空列表开始并使用新的随机元素扩展它的自定义生成器,直到列表满足谓词?
我可能需要对生成器使用计算表达式gen { },但我不知道如何。
PS:我知道,与 wellFormedList 的原始实现不同,这种自定义生成器的分布在满足谓词的所有列表中并不统一。
【问题讨论】:
-
我们可以从您的问题中假设不满足谓词的列表只需要添加更多随机元素,直到它满足?没有必要扔掉一个不满足谓词的列表,我们应该给它附加更多的元素?
-
是的,没错。