我需要编写一个QuickCheck属性来检查大于0的给定数字的Collatz猜想。
我面临的挑战是,我为Collatz猜想编写的代码是递归的,所以要么按预期得到1,要么永远循环。
我不确定我是否知道如何利用QuickCheck就是这种情况。
知道吗?
发布于 2020-03-03 15:10:11
我认为这是为了练习编写QuickCheck属性的作业吗?
我怀疑这样做的意图是,如果Collatz递归以1结束(就像对所有正整数所做的那样)并永远循环,您就会编写一个成功的测试。换句话说,您不会被期望检测到递归是永远循环的(无论如何只能通过近似来实现,如果递归时间太长,就放弃)。
因此,如果您有一个返回1的递归函数1,那么您的QuickCheck属性最终将归结为collatz n == 1。根据您对QuickCheck属性的了解,您可能只需要编写具有适当类型签名的:prop_collatz n = collatz n == 1。或者,您应该使用Property类型和forAll类型,或者应该使用Positive类型来测试正整数。很难知道你的老师在期待什么。
我建议查看类中的一些示例,在这些类中,您测试了正整数集、非负整数集或其他约束整数集的属性,并遵循该示例。
https://stackoverflow.com/questions/60500290
复制相似问题