2017-11-18 8 views
0

私は、この事実またはデータベースをプロローグに入れて、教育が同じかそれよりも低いかどうかを確認します。例えば高校< = highschoolは真で高校です< = phdも真ですが、マスターは< = highschoolはfalseです。同じ値をプロローグで2回印刷を停止するには?

edu_less(high_school, bachelor). 
edu_less(bachelor, masters). 
edu_less(masters, phd). 

edu_lessOrEqual(X,X). 
edu_lessOrEqual(X, Y):- edu_less(X,Y). 
edu_lessOrEqual(X, Y):- edu_less(X,Z), 
         edu_lessOrEqual(Z,Y). 

しかし、私は唯一の真の出力に印刷したいとき、これは

edu_lessOrEqual(masters, phd). 
true; 
true; 
false. 

出力します。

true; 
false. 

答えて

2

基本的に、edu_lessOrEqual/2の第三節では、あなたが再帰的edu_lessOrEqual/2を呼び出すためですので、あなたは、ZおよびYは両方phdが実際にそれを満たすphdに等しい(phdにインスタンス化される場合に巻き上げますあなたが綴っているロジック)。第3節の最後にZ \= Yを追加することで修正できますが、これは条件付きのステートメントを使用して無駄な選択肢がないことを確認するように誘惑される状況です。

関連する問題