2016-04-27 20 views
0

Also versuche ich ein Stück Code zu schreiben, der überprüft, ob ein Element in einer Liste ist oder nicht.Prolog überprüft rekursiv, ob ein Element in einer Liste ist

is_member(_,[]). 
is_member(X,[X|_]). 
is_member(X,[_|tail]):- is_member(X,tail). 

Dies ist derzeit, was ich für den Code habe. Es funktioniert, wenn das Element in der ersten Position ist, aber den Rest der Liste nicht überprüft. Kann mir jemand helfen herauszufinden, was ich falsch mache? Vielen Dank.

+1

Was ist die eingebaute mit [ 'Mitglied/2'] (http://www.swi-prolog.org/pldoc/doc_for? object = Mitglied/2) Funktion –

Antwort

2

Ihre Prädikate stehen die folgenden zwei Probleme:

  • Der Basisfall is_member(_,[]). wird für eine leere Liste immer true zurück, die nicht korrekt ist; und

  • Ihre Variable sollte mit einem U ppercase Zeichen beginnen: Schwanz.

Ein Beispiel, wie ein Prädikat implementieren, die diese beiden Probleme löst:

is_member(X,[X|_]). 
is_member(X,[_|Tail]):- is_member(X,Tail). 
Verwandte Themen