半偶数的Haskell快速检查属性

半偶数的Haskell快速检查属性,haskell,quickcheck,Haskell,Quickcheck,我有一个程序,它接受一个列表,并将列表中的每个偶数减半 halfEvens :: [Int] -> [Int] halfEvens xs = [if x `mod` 2 == 0 then x `div` 2 else x | x <- xs] 我的问题是,此属性在3次测试后失败。 我不知道我做错了什么。我写的财产错了吗 我想要这个函数的[…]一个quickCheck属性,它验证初始列表和编译列表是否相等,当且仅当该列表中没有偶数时 这不是你要测试的。您正在测试两个属性是否适用:

我有一个程序,它接受一个列表,并将列表中的每个偶数减半

halfEvens :: [Int] -> [Int]
halfEvens xs = [if x `mod` 2 == 0 then x `div` 2 else x | x <- xs]
我的问题是,此属性在3次测试后失败。 我不知道我做错了什么。我写的财产错了吗

我想要这个函数的[…]一个quickCheck属性,它验证初始列表和编译列表是否相等,当且仅当该列表中没有偶数时

这不是你要测试的。您正在测试两个属性是否适用:

A && B
但是,您想要两者之一(
A&B
),或者一个也不要(
not(A | | B)
):

因此,您将测试以下内容

prop_evens xs = p1 == p2
  where p1 = halfEvens xs == xs
        p2 = length (filter (even) xs) == 0
如果要使用奇数列表进行测试,请将
forAll
与右侧
Gen
一起使用:

property $ forAll (listOf $ arbitrary `suchThat` odd) $ prop_evens
我想要这个函数的[…]一个quickCheck属性,它验证初始列表和编译列表是否相等,当且仅当该列表中没有偶数时

这不是你要测试的。您正在测试两个属性是否适用:

A && B
但是,您想要两者之一(
A&B
),或者一个也不要(
not(A | | B)
):

因此,您将测试以下内容

prop_evens xs = p1 == p2
  where p1 = halfEvens xs == xs
        p2 = length (filter (even) xs) == 0
如果要使用奇数列表进行测试,请将
forAll
与右侧
Gen
一起使用:

property $ forAll (listOf $ arbitrary `suchThat` odd) $ prop_evens
我想要这个函数的[…]一个quickCheck属性,它验证初始列表和编译列表是否相等,当且仅当该列表中没有偶数时

这不是你要测试的。您正在测试两个属性是否适用:

A && B
但是,您想要两者之一(
A&B
),或者一个也不要(
not(A | | B)
):

因此,您将测试以下内容

prop_evens xs = p1 == p2
  where p1 = halfEvens xs == xs
        p2 = length (filter (even) xs) == 0
如果要使用奇数列表进行测试,请将
forAll
与右侧
Gen
一起使用:

property $ forAll (listOf $ arbitrary `suchThat` odd) $ prop_evens
我想要这个函数的[…]一个quickCheck属性,它验证初始列表和编译列表是否相等,当且仅当该列表中没有偶数时

这不是你要测试的。您正在测试两个属性是否适用:

A && B
但是,您想要两者之一(
A&B
),或者一个也不要(
not(A | | B)
):

因此,您将测试以下内容

prop_evens xs = p1 == p2
  where p1 = halfEvens xs == xs
        p2 = length (filter (even) xs) == 0
如果要使用奇数列表进行测试,请将
forAll
与右侧
Gen
一起使用:

property $ forAll (listOf $ arbitrary `suchThat` odd) $ prop_evens
初始列表和编译列表是相等的当且仅当没有 那个列表中的偶数

prop_evens xs = ((halfEvens xs == xs) && (length (filter (even) xs) == 0))
反例:
[0]
包含偶数,不受
半偶数的影响

您需要将该属性限制为非零元素的列表。 相应地利用
(==>)
进行攻击

初始列表和编译列表是相等的当且仅当没有 那个列表中的偶数

prop_evens xs = ((halfEvens xs == xs) && (length (filter (even) xs) == 0))
反例:
[0]
包含偶数,不受
半偶数的影响

您需要将该属性限制为非零元素的列表。 相应地利用
(==>)
进行攻击

初始列表和编译列表是相等的当且仅当没有 那个列表中的偶数

prop_evens xs = ((halfEvens xs == xs) && (length (filter (even) xs) == 0))
反例:
[0]
包含偶数,不受
半偶数的影响

您需要将该属性限制为非零元素的列表。 相应地利用
(==>)
进行攻击

初始列表和编译列表是相等的当且仅当没有 那个列表中的偶数

prop_evens xs = ((halfEvens xs == xs) && (length (filter (even) xs) == 0))
反例:
[0]
包含偶数,不受
半偶数的影响

您需要将该属性限制为非零元素的列表。
相应地利用
(==>)

或者,如果你想变得聪明,
A==B
@SilvioMayolo:或者想运用常识。谢谢。或者,如果你想变得聪明,
A==B
@SilvioMayolo:或者想用常识。谢谢。或者,如果你想变得聪明,
A==B
@SilvioMayolo:或者想用常识。谢谢。或者,如果你想变得聪明,
A==B
@SilvioMayolo:或者想用常识。谢谢