2017-06-01 68 views
1

我將誠實和前言說這是作業,但我非常需要幫助。序言:兩個對象之間的差異關係

我是Prolog的新手,來自C++和Javascript,無論我嘗試多麼努力,我都無法得到它。

我應該做的是能夠找到兩個日期之間的差異(假設非閏年)。

基本上我有一個知識庫與佈局類似的信息:

object(A, B). 
    object(A, B). 
    ... 

其中A表示月和B表示該月的總天數。 (eg。object(1,31)。)

我應該用於輸入的表達式是: 差異(對象(A,B),對象(A,B),N)。 (N =對象之間的差異)。

我已經嘗試了一些不同的東西(我知道這是不是在正確的軌道上),並且一直沒能得到進一步則:

difference(object(A,B), object(A,B),N):- 
    days(M,D), days(M,D), 
    Y = 365-D, 
    N is Y. 

我不明白怎麼做這兩個對象註冊爲我可以操作的單個事物,因此可以繼續解決問題。

有人請請請指出我在正確的方向嗎?

謝謝

家庭作業問題(根據請求)。 假設存在描述非閏年的每個日曆月有多少天在 中的天關係。

days(1,31). 
days(2,28). 

(依此類推)。

結構dateObject(M,D)描述日期。例如dateObject(6,5)將表示6月5日。 寫出關係差異(From,To,N),其中N是起始日期之間的天數 日期From和結束日期To。起始日期不包括在計數中。對於 例如:

?- difference(dateobject(2,1),dateobject(2,2),N). 
N = 1. 

如果在一個日期當天或月份值是無效的(例如dateobject(4,31),dateobject(13,1),則N的值 返回應爲-1如果。起始日期晚於要那麼-1誤差值也應爲N.

+0

「對象之間的區別」是什麼意思? – Enigmativity

+0

我不明白你的意思是「將這兩個對象註冊爲我可以操作的單個事物」? – Enigmativity

+0

@Enigmativity基本上,對象代表幾個月中的日期: 天(1,31)。 不同(dateobject(4,30),dateobject(5,15),N)。 – TheLeftRight

回答

1

這裏是一個非常不好的解決辦法回來了 - 我敢肯定有人比我聰明會拿出更好的東西

?- difference(dateobject(1,28),dateobject(6,1),N),write(N),nl. 

days(1,31). 
days(2,28). 
days(3,31). 
days(4,30). 
days(5,31). 
days(6,30). 
days(7,31). 
days(8,31). 
days(9,30). 
days(10,31). 
days(11,30). 
days(12,31). 

daysbetween(M,FD,M,TD,N) :- !, N is TD - FD. 
daysbetween(FM,FD,TM,TD,N) :- 
    days(FM,D), 
    FM2 is FM + 1, 
    daysbetween(FM2,FD,TM,TD,N2), 
    N is D + N2. 

difference(dateobject(FM,FD),dateobject(TM,TD),N) :- 
    TM >= FM, 
    FD >= 1, 
    days(FM,FDM), 
    FD =< FDM, 
    TD >= 1, 
    days(TM,TDM), 
    TD =< TDM, 
    daysbetween(FM,FD,TM,TD,N), 
    N > 0, 
    !. 
difference(_,_,-1). 
+0

我會盡快測試並回復你。儘管如此,不要說這很糟糕,如果我想出了任何東西,那就更好了,而且你不知道我在這裏給你的所有幫助是多少。一旦我回到我的電腦將會測試 – TheLeftRight

+0

先生,你是一個字面傳說。 – TheLeftRight