Ich beginne gerade mit Prolog, und ich kann nicht herausfinden, warum das folgende nicht funktioniert, wie ich es erwarte. Ich versuche, ein Prädikat zu erstellen, das wahr zurückgibt, wenn Liste L2 in L1 enthalten ist. Diese ist, was ich schrieb:Prolog Prädikat Probleme
assert(contains (L1, L1)).
assert(contains(L1, [X|L2]):-member(X, L1), contains(L1, L2)).
assert(contains(L1, [])).
Ich dachte, dies entspricht „wenn X von‚L3 = X | L2‘ist in L1, und auch L2 ist in L1 dann wahr“ sein, mit enthält (L1, L2) werden rekursiv übersetzt, bis entweder alle Mitglieder durchlaufen wurden und wir die letzte Option übrig haben, oder wir finden ein Mitglied, das nicht in L1 ist, und es wird das Prädikat nicht bestehen.
Leider scheint es so nicht zu funktionieren. Es scheint nur den Wert von member (X, L1) zurückzugeben, also enthält ([1,2,3], [1,4,5])), enthält aber ([1,2,3], [4, 1,5]) nicht.
Was mache ich falsch?
Welche Prolog-Implementierung verwenden Sie? Ich kann Ihr Problem nicht in SWI-Prolog reproduzieren (obwohl es auch nicht richtig funktioniert). – mercator
SWI-Prolog Version 2.7.12 –
2.7.12? Ja wirklich?! Versuchen Sie etwas neueres wie 5.6.x oder 5.7.x. – Kaarel