Пролог список и фильтрация - PullRequest
0 голосов
/ 05 июля 2018

У меня проблема с упражнением Пролог. Я пытаюсь изучать информатику у себя дома и делаю серию упражнений, взятых из Интернета.

Вопрос в следующем;

Создайте предикат с именем filteringPairsAtoms/3, чтобы при заданном атоме (первом аргументе) и списке пар объединить третий параметр с отфильтрованным списком пар, выбрав в качестве атома только пары, у которых первый компонент имеет атом. первый аргумент.

Пример

filteringPairsAtoms(sA,[[basA,absAb],[ab,bbsA],[sA,abbsB],[bsA,sAsB],[sA,bb]],X)  

должно привести к

X = [[sA,abbsB],[sA,bb]]

Я пытаюсь решить это, но мне не с кем спросить, потому что я учусь один, и у меня нет профессора, чтобы писать или что-то в этом роде.

Любая помощь приветствуется.

Спасибо !!!

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете начать с того, что у вас уже есть:

filteringPairsAtoms(sA, [[basA,absAb],[ab,bbsA],[sA,abbsB],[bsA,sAsB],[sA,bb]], X) :-
    X = [[sA,abbsB],[sA,bb]].

Это хорошее начало для любого. Но мы знаем больше: это должно быть так, что

filteringPairsAtoms(sA, [[sA,abbsB],[bsA,sAsB],[sA,bb]], X) :-
    X = [[sA,abbsB],[sA,bb]].

%% and
filteringPairsAtoms(sA, [[bsA,sAsB],[sA,bb]], X) :-
    X = [[sA,bb]].

%% and
filteringPairsAtoms(sA, [[sA,bb]], X) :-
    X = [[sA,bb]].

%% and
filteringPairsAtoms(sA, [], X) :-
    X = [].

Сравнивая последовательные предложения, мы также замечаем, что это должно быть

filteringPairsAtoms(sA, [[sA,abbsB] | [[bsA,sAsB],[sA,bb]] ], X) :-
    sA = sA,
    X = [[sA,abbsB] | Y],
    filteringPairsAtoms(sA, [[bsA,sAsB],[sA,bb]], Y).

(это только первые два предложения сверху, вместе взятые); и

filteringPairsAtoms(sA, [[bsA,sAsB] | [[sA,bb]] ], X) :-
    dif( sA, bsA),
    X = Y,
    filteringPairsAtoms(sA, [[sA,bb]], Y).

Все, что вам осталось сделать, это обобщить , заменив конкретные термины логическими переменными. Как это:

filteringPairsAtoms(SA, [Head | Tail ], X) :-
    Head = [BsA, _]
    dif( SA, BsA),
    X = Y,
    filteringPairsAtoms(SA, Tail, Y).

и доведите это до конца.

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