Для данного предиката pred : 'a list -> bool
и генератора gen : Gen<'a>
рассмотрим следующий генератор правильно сформированных списков, которые удовлетворяют предикату:
let wellFormedList pred gen =
Gen.ofList gen
|> Gen.filter pred
Как упомянуто в руководстве FsCheck , должна быть высокая вероятность того, что предикат верен для случайного списка.
К сожалению, это предположение не выполняется в моем случае. Таким образом, мне нужно определить собственный генератор для списков, которые удовлетворяют предикату.
Как определить собственный генератор, который запускается из пустого списка и дополняет его новыми случайными элементами, пока список не удовлетворяет предикату?
Возможно, мне нужно использовать вычислительное выражение gen { }
для генераторов, но я не понимаю, как.
PS: я знаю, что, в отличие от первоначальной реализации wellFormedList
, распределение такого пользовательского генератора не является равномерным по всем спискам, которые удовлетворяют предикату.