2010-11-23 25 views
2

Ich muss ein Programm schreiben, das ein Prädikat p(A,B,C,D,E,F) hat. A, B, C, D, E, F sind Listen.
A enthält D, E und F. (Etwas wie A und B ist D, A und C ist E) F enthält A ohne D und E.
Und auch Elemente in Liste F sind paarweise (Beispiel wenn A enthält [ a, b, c] dann würde F [a, a, b, b, c, c] enthalten.)Prädikat mit Prolog

Also .. ich kann nicht wo anfangen. Ich habe Tutorial gelesen und immer noch .. Ich verstehe es nicht ganz.

Beispiel:

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] 
+1

fügen Sie ein vollständiges Beispiel hinzu. Wann sollte Ihr Prädikat zum Beispiel wahr sein ?! – aioobe

+0

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

+0

aber "F" sollte "Paare" enthalten? – aioobe

Antwort

4

A enthält D, E und F

Klingt wie Sie einen Blick auf member und append haben möchte.

So etwas wie A und B D, A und C ist E

Dies ist wahrscheinlich mit etwas ähnlichem wie append(A, B, D) gelöst werden kann ("D ist die Verkettung von A und B") und append(A, C, E) ("E ist die Verkettung von A und C").

F enthält A ohne D und E.

Verwenden append um herauszufinden, was F ist. So etwas wie append(FwithoutPairs, A, DandE) und erstellen Sie ein pairsOf Prädikat, die so etwas wie

pairsOf([], []). 
pairsOf([H, H | T], [H | S]) :- pairsOf(T, S). 
+0

Entschuldigung ... aber ich verstehe es immer noch nicht. – Kaspars

+0

was bekommst du nicht? – aioobe

+0

was tut append tun? – Kaspars

0

Neben aioobe's answer aussieht:

etwas wie A und B D, A und C ist E

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

Sie müssten schließlich die Listen bestellen, aber intersection/3 scheint genauer.