Было бы неплохо получить более ясную формулировку проблемы: трудно сказать по вашему вопросу, но мне кажется, что вы хотите сопоставить префикс списка и вернуть все элементы, которые не являются частью префикса.Вот как я могу это сделать:
match_prefix( [] , [] , [] ).
match_prefix( [] , [Y|Ys] , [Y|Ys] ).
match_prefix( [H|Xs] , [H|Ys] , Tail ) :-
match_prefix( Xs , Ys , Tail ).
- , если 1-й аргумент (требуемый префикс) является пустым списком, а 2-й аргумент (список, который нужно проверить на префикс) является пустымlist, тогда 3-й аргумент (хвост без префикса проверяемых списков) является пустым списком.
- В противном случае ... если 1-й аргумент является пустым списком, но второй аргумент не является- пустой список, мы исчерпали желаемый префикс, поэтому мы объединяем третий аргумент (результат) со вторым аргументом (список).
- В противном случае ... если первые 2 аргумента не пустысписки и их головы объединяются, мы снимаем головы и зацикливаемся на хвостах.
Это должно было бы сделать это (но я не могу сказать, что проверил это, так как я неВ настоящее время есть пролог, с которым можно играть).