是否有修饰符可以让我生成不包含指定整数的整数列表?

这是一个完成相同功能的函数:

listofInts :: Int -> Gen [Integer]
listofInts  a = rmInt a [] arbitrary

rmInt :: Int -> [Int] -> [Int] -> [Int]
rmInt a newList [] = newList
rmInt a newList (x:xs)
|a == x = newList : rmInt a xs
|otherwise = newList : x : rmInt a xs

最佳答案

listOf 中的suchThatTest.QuickCheck.Gen组合器应使您能够做到这一点。

listofInts :: Int -> Gen [Integer]
listOfInts x = listOf (suchThat arbitrary (/=x))

这种方法的优点是更尊重生成的大小参数:suchThat确保与谓词不匹配的生成值不会影响大小。

10-08 12:46