2012-05-07 11 views
2

Prologで比較的単純な述語を書くのに問題があります。この述語は時間:分の形式で2つの引数を受け取り、2つの間の差を計算し、その値が40分以上かどうかをチェックします。ここでプロローグの時間差の計算

は、私がこれまで持っているものです。

time(Time1, Time2):- 
    X:Y =:= Time1, A:B =:= Time2, calculate_time(X, Y, A, B). 

calculate_time(X, Y, A, B):- 
    Y - X =:= 0, 
    B - A >= 40, !. 
calculate_time(X, Y, A, B):- 
    Y - X > 0. 

これ、あなたが想像できるように、すなわち、エラーを与えている:

?- time(10:00, 10:55). 
ERROR at clause 1 of user:time/2 !! 
INSTANTIATION ERROR- in arithmetic: expected bound value 

だから、私の知る限り理解できるように、彼は考えています彼には4つの議論が与えられている。なぜ彼はこのように反応しているのですか?

:-op(500,xfy,:). 
:-op(600,xfy,/). 

この述語は、より大きなプログラムの一部であると考えられるので、これらの2行は、ファイルに滞在する必要があります。また、ファイルの先頭に、私は、次のコマンドを持っています。私はモジュールを一切使用せず、YAPを使用しています。

助けていただけたら幸いです!

答えて

2

あなたには2つの問題があります。 最初は、数値計算式ではなく構造体を使用して数値計算式を評価するかどうかをテストする=:=/2を使用しています。

また、あなたのロジックが(最後の句はあなたが初めての時間から数分を引いている、意味がありません)完全に右ではないようだ

+0

ヒント:ヨーヨーは(>)/ 2と言うことに反して(@>)/ 2は評価されません。チェックアウト:http://www.swi-prolog.org/man/arith.html –

+0

あなたは正しいです。固定の答え – gusbro

+0

助けてくれてありがとう! –