我需要检查第二个列表中的每个元素是否具有比第一个列表中的相同元素多3倍的实例。我的函数一直返回false,我不知道我的东西是错的。PROLOG:检查第一个列表是否包含比第二个列表少3倍的元素
下面是代码:
fourth(_,[ ]).
fourth(A,[HF|TF]) :-
intersection(A, HF, NewA),
intersection(TF, HF, NewB),
append(HF, NewB, NewT),
append(NewA, NewA, NewAA),
append(NewA, NewAA, NewAAA),
length(NewAAA) == length(NewT),
select(HF, TF, NewTF),
fourth(A, NewTF).
例子:
?- fourth([1,2,3], [1,1,1]).
true.
?- fourth([1,2,3], [1,1,1,1]).
false.
?- fourth([1,2,3], [1,1]).
false.
?- fourth([1,2,2,3], [1,1,2,2,1,2,2,2,2]).
true.
请注意,如果您使用SWI-pl的**选择/ 3 **,它会失败的第四个([1,2,3],[1,1,1])。而如果您尊重OP规范,则不应该这样做。在使用** select/3 **之前使用** member/2 **知道当前的第一个列表元素是否在第二个列表中,但应该可以解决这个问题。 – m09