我要给的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。为什么会这样,我该如何解决?
答案 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]
这是您要找的吗?