子列表的最小大小

时间:2019-05-15 17:27:04

标签: prolog

我要给的2个列表会找到包含第一个列表的所有元素的最小子列表。我的意思是给定Sublist=[1,3,1,3,1,3,3,2]K=[1,2,3]

我想要一个返回4的函数,它是包含sublist=[1,3,3,2]上所有元素的最小K的大小。

我的代码:

ping(K,Sublist,Min):-
      append(_,List,Sublist),
      \+subtract(K,List,[]),
      length(List,Len),
      ( Len<10 ,Len>3 ->
        Min is Len
       ;
         true/0 ).

当我使用此查询时,这应该返回Min = 4-> ping([1,2,3],[1,3,1,3,1,3,3,2],Min).,但是它返回true。为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:0)

这是一个有效的谓词:

ping(K, Sublist, Min, L2):-
    intersection(Sublist, K, L1),
    list_to_set(L1, L2),
    length(L2, Min).

使用ping([1,2,3],[1,3,1,3,1,3,3,2], Min, L2).进行调用将返回:

Min = 3
L2 = [1, 3, 2]

这是您要找的吗?