在Haskell中生成一个不等于指定整数的整数列表?

dfj*_*328 3 haskell generator quickcheck

是否有一个修饰符允许我生成一个不包含指定整数的整数列表?

这是一个完成相同工作的功能:

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
Run Code Online (Sandbox Code Playgroud)

mad*_*jar 9

listOfsuchThat组合子从Test.QuickCheck.Gen应使您能够做到这一点.

listofInts :: Int -> Gen [Integer]
listOfInts x = listOf (suchThat arbitrary (/=x))
Run Code Online (Sandbox Code Playgroud)

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


Fre*_*abe 6

我认为Gen [Int]你写的时候实际意味着什么Gen [Integer].您只需过滤生成的列表:

listofInts :: Int -> Gen [Int]
listofInts x = filter (/= x) <$> arbitrary
Run Code Online (Sandbox Code Playgroud)