是否有一个修饰符允许我生成一个不包含指定整数的整数列表?
这是一项完成同样工作的功能:
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
答案 0 :(得分:9)
来自Test.QuickCheck.Gen
的listOf
和suchThat
组合器应该可以让您这样做。
listofInts :: Int -> Gen [Integer]
listOfInts x = listOf (suchThat arbitrary (/=x))
此方法的优点是更加尊重生成的size参数:suchThat
确保与谓词不匹配的生成值不会影响大小。
答案 1 :(得分:6)
我认为你写Gen [Int]
时实际上意味着Gen [Integer]
。您只需过滤生成的列表:
listofInts :: Int -> Gen [Int]
listofInts x = filter (/= x) <$> arbitrary