2017-10-21 7 views
0

結果を強制することができるかどうかを知りたい。プロローグで結果をfalseに強制する方法

test(0, 0, 0). 

は、Prologでfalseにする必要があります。

+1

通常は 'test/3'のロジックをそのように書くことでこれを行います。 –

+3

[こちらを参照](https://stackoverflow.com/q/3001825/335858) – dasblinkenlight

+4

'test(0,0,0): - fail.'と書くことができます。しかし、照会が失敗するのを防ぐ最も適切な方法は、それを成功させるための事実と規則を提示しないことです。強制的な失敗は悪いコードの匂いになる可能性があります。 – lurker

答えて

3

はい、あなたはそうのような小さなヘルパー述語でそれを行うことができます。

:- 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). 

サンプルクエリ:不要なソリューションが除外されているか

?- test(1,1,2). 
true 
?- test(1,-1,0). 
true 

注:まあ

 
?- test_(0,0,0).   % 0+0 = 0 
true 
?- test(0,0,0). 
false 
関連する問題