测试一个过于笼统的程序

假设谓词的正确定义是

len([],0).
len([_|T],N)  :-  len(T,X), N is  X+1.

然而,我们最终得到了以下错误的定义。

len2([],0).
len2([_|T],N)  :-  len(T,X),  ( N  is  X+1 ; N is X + 2, N = 10000 ).

所有标准测试都没有发现错误,因为它的工作原理与 len/2 一样,除非它偶然发现长度正好为 9999 的元素列表,其中有两个可能的答案。

正如用户mjano314 所 观察到的。怎么可能检测到这样的错误?


请注意,len2/2上面使用len/2. 以这种方式,恰好有一个定义过于笼统的情况。将len2/2是直接递归的,我们将有无限多的过于笼统的情况。显然,在这种情况下,定位错误会更容易。

以上是测试一个过于笼统的程序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>