0
Ich möchte wissen, ob es möglich ist, ein Ergebnis zu erzwingen, z.Wie erzwinge ein Ergebnis falsch in Prolog
test(0, 0, 0).
in Prolog falsch sein.
Ich möchte wissen, ob es möglich ist, ein Ergebnis zu erzwingen, z.Wie erzwinge ein Ergebnis falsch in Prolog
test(0, 0, 0).
in Prolog falsch sein.
Ja, Sie können es mit einem kleinen Helfer Prädikat tun wie so:
:- use_module(library(clpfd)).
test_(X,Y,Z) :- % base relation
Z #= X+Y. % here: integer sum
test(X,Y,Z) :- % exclude (0,0,0) as a solution
abs(X) + abs(X-Y) + abs(Y-Z) #\= 0,
test_(X,Y,Z).
Beispielabfragen:
?- test(1,1,2).
true
?- test(1,-1,0).
true
Hinweis, wie die unerwünschte Lösung ausgeschlossen ist:
?- test_(0,0,0). % 0+0 = 0 true ?- test(0,0,0). false
Well Normalerweise tust du das, indem du die Logik von "test/3" auf diese Weise schreibst. –
[Siehe dieses Q & A] (https://stackoverflow.com/q/3001825/335858) – dasblinkenlight
Sie könnten schreiben "test (0,0,0): - fail.'. Die am besten geeignete Methode zum Sicherstellen einer fehlgeschlagenen Abfrage besteht jedoch darin, keine Fakten und Regeln zu präsentieren, die den Erfolg der Abfrage ermöglichen. Fehler zu erzwingen könnte ein schlechter Code-Geruch sein. – lurker