предикат с Прологом - PullRequest
       1

предикат с Прологом

2 голосов
/ 24 ноября 2010

Мне нужно написать программу с предикатом p(A,B,C,D,E,F).A, B, C, D, E, F. являются списками.
A содержит D, E и F. (Что-то вроде A и B является D, A и C является E) F содержит A без D и E.* А также элементы в списке F попарно (например, если A содержит [a, b, c], тогда F будет содержать [a, a, b, b, c, c].)

Я не могу с чего начать.Я прочитал учебник и до сих пор .. Я не совсем понимаю.

пример:

A is [a,b,c,d,e,f,g]  
B is [a,c,d,q,w]  
C is [e,d,g,m,n]  
D is [a,c,d]  
E is [e,d,g]  
F is [b,b,f,f]  

Ответы [ 2 ]

4 голосов
/ 24 ноября 2010

A содержит D, E и F

Похоже, вы хотели бы взглянуть на member и append.

Что-то вроде A и B - это D, A и C - это E

Возможно, это можно решить с помощью чего-то похожего на append(A, B, D) ("D - это объединение A и B") и append(A, C, E) ("E - это объединение A и C ").

F содержит A без D и E.

Используйте append, чтобы узнать, что такое F. Что-то вроде append(FwithoutPairs, A, DandE), а затем создайте предикат pairsOf, который выглядит как

pairsOf([], []).
pairsOf([H, H | T], [H | S]) :- pairsOf(T, S).
0 голосов
/ 06 июля 2017

В дополнение к ответу aioobe :

Что-то вроде A и B - это D, A и C - это E

p(A,B,C,D,E,_F):-
    intersection(A,B,D),
    intersection(A,C,E).

В конечном итоге вам потребуется упорядочить списки, но intersection/3 кажется более точным.

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