Hallo zusammen,
falls sich hier jemand mit Prolog auskennt. Ich habe ein Prädikat das
beweisbar ist, wenn das Element E in der Liste enthalten ist.
1
member( E, [E|_] ).
2
member( E, [_|R] ) :- member( E, R ).
Wie kann ich davon die Negation bilden? Mir fallen die Möglichkeiten
"fail" und vielleicht "!" ein, aber irgendwie fehlt mir der Ansatz das
zu realisieren.
Gruß
Dennis
Dennis S. schrieb:> member( E, [E|_] ).> member( E, [_|R] ) :- member( E, R ).>> Wie kann ich davon die Negation bilden?
Oh, ein Prolog Programmierer.
member/2 ist bereits in Prolog implementiert. Du solltest andere Namen
wählen.
Zwei Möglichkeiten sind:
1
member1(E,[E|_]).
2
member1(E,[_|T]) :-
3
member1(E,T).
4
5
notmember1(E,L) :-
6
member1(E,L),!,fail.
7
notmember1(E,L).
8
9
notmember2(E,L) :-
10
member1(E,L), !, fail
11
;
12
true.
Viele Prolog Implementierungen haben bereits ein not implementiert:
Damit wird ein Aufruf zu:
Josef schrieb:> Oh, ein Prolog Programmierer.
Das würde ich so nicht unterschreiben! :-D
> member/2 ist bereits in Prolog implementiert. Du solltest andere Namen> wählen.
Ja, du hast Recht. War jetzt auch erst mal eine Pen-and-Paper-Übung.
> notmember1(E,L) :-> member1(E,L),!,fail.> notmember1(E,L).> \+member1(a,[x,y,z]).
So einfach.. ich wusste, dass ich das irgendwie mit ! und fail
hinbekommen kann, aber mir fehlt doch noch ein bisschen das Verständnis.
Vielen Dank für deinen Input.
Gruß
Dennis
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.