1

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を使用しています。

どんな助けでもいただければ幸いです!

4

2 に答える 2

2

2つの問題があります。1つ目は、=:=/22つの数式が同じと評価されるかどうかをテストするために使用しているものですが、数式ではなく構造体を使用しています。

また、あなたの論理は完全に正しくないようです(最後の節は意味がありません、あなたは最初の時間から分を引いています)

于 2012-05-07T18:18:52.780 に答える
0

時間差が40分以上の場合、trueを返します。

プログラム:

time(A:B,X:Y):- 
    HOURS is X - A,
    MINUTES is Y - B,
    LENGTH is HOURS*60 + MINUTES,
    LENGTH >= 40.

test1:

?- time(06:40,09:45).
true.

test2:

?- time2(09:40,09:45).
false.
于 2018-09-20T10:21:09.503 に答える