Минимальный размер подсписка - PullRequest
0 голосов
/ 15 мая 2019

То, что я хочу сделать, это дать 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 голосов
/ 19 мая 2019

Вот рабочий предикат:

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]

Это то, что вы искали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...