2016-10-17 41 views

回答

0

認爲它是這樣的:

如果你想找到的10和4的MOD,你把10乘4並返回提醒。但是因爲divide是多次減法,所以我們將在這裏使用多重減法邏輯。

例如:10 mod 4是相同10-4 mod 4這是6 mod 4其是作爲6-4 mod 4 = 2 mod 4再次相同。由於第一個元素(2)小於第二個(4),我們在此終止程序並返回第一個元素(2)。

mod(_, 0, 0).說任何事情MOD 0是0

mod(0, _ , 0).說的是0 MOD什麼是0

mod(X, s(0), 0).說任何事情MOD 1是0。

這是棘手的部分:

mod(A, B, N) :- minus(A, B, R), (R @< B -> N = R ; mod(R, B, N)).這使用多個減號邏輯。如果先從第一個中刪除第二個,然後檢查第一個是否小於第二個。如果是,則遞歸調用mod函數。如果不返回第一個元素。

s(0). 
s(X):- X. 

plus(0, Y, Y). 
plus(s(X), Y, s(Z)):- plus(X , Y , Z). 

minus(A, B, C) :- plus(C, B, A). 

mod(_, 0, 0). 
mod(0, _ , 0). 
mod(X, s(0), 0). 
mod(A, B, N) :- minus(A, B, R), (R @< B -> N = R ; mod(R, B, N)). 

謝謝@Toby編輯請求。

+0

雖然這段代碼可能有助於解決問題,但它並沒有解釋_why_和/或_how_它是如何回答問題的。提供這種附加背景將顯着提高其長期教育價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 –