2012-05-07 91 views
2

我在編寫Prolog中一個相對簡單的謂詞時遇到了一些麻煩。這個謂詞應該以小時:分鐘的格式接收兩個參數,計算兩者之間的差異並檢查該值是大於還是等於40分鐘。計算Prolog中的時間差異

這是我到目前爲止有:

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 

所以,據我瞭解,他認爲他得到了四個論點。他爲什麼這樣反應?此外,在文件的開頭,我有以下命令:

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

這個謂詞應該是一個更大的計劃的一部分,所以這兩條線需要留在文件中。我沒有使用任何模塊,我正在使用YAP。

任何幫助,將不勝感激!

回答

2

你有兩個問題。 第一個問題是您正在使用=:=/2,它測試兩個數值表達式的計算結果是否相同,但您使用的是結構而不是數字表達式。

它還看來你的邏輯是不完全正確的(最後一句是沒有意義的,你從第一次的時間減去分鐘)

+0

提示:相反的是喲說(>)/ 2確實評估,只有(@>)/ 2不評估。檢查:http://www.swi-prolog.org/man/arith.html –

+0

你是對的。修復答案 – gusbro

+0

感謝您的幫助! –