Имеет ли значение, что значения являются двумерными координатами? Есть ли на них порядок, который вы должны соблюдать, или это просто порядок элементов в списке? Я возьму на себя последнее.
Если вы хотите разделить список в какой-то момент, обычно стоит использовать стандартный предикат append/3
. Например, предположим, что мы хотим сократить список [a, b, c, d, e]
на префикс, содержащий элементы до c
, и суффикс, содержащий элементы после c
. Вот как это делается:
?- append(Prefix, [c | Suffix], [a, b, c, d, e]).
Prefix = [a, b],
Suffix = [d, e] ;
false.
Здесь c
исключен из префикса, но это легко исправить:
?- append(Prefix, [c | Suffix], [a, b, c, d, e]), append(Prefix, [c], UpToAndIncludingC).
Prefix = [a, b],
Suffix = [d, e],
UpToAndIncludingC = [a, b, c] ;
false.
Мы можем дать этому предикату красивое имя:
list_pivot_prefix(List, Pivot, Prefix) :-
append(Prefix0, [Pivot | _Suffix], List),
append(Prefix0, [Pivot], Prefix).
И ваш предикат find_list/3
затем просто находит все списки в данном списке списков, для которых выполняется это отношение:
find_list(Lists, Element, Prefix) :-
member(List, Lists),
list_pivot_prefix(List, Element, Prefix).
Вот ваш тестовый пример:
?- find_list([[(1,2),(1,3),(1,4)],[(2,2),(2,3),(2,4)]],(1,3),List2).
List2 = [ (1, 2), (1, 3)] ;
false.