2017-10-21 1 views
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.

+1

Well Normalerweise tust du das, indem du die Logik von "test/3" auf diese Weise schreibst. –

+3

[Siehe dieses Q & A] (https://stackoverflow.com/q/3001825/335858) – dasblinkenlight

+4

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

Antwort

3

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