0
如何編寫mod/3函數後繼算術(Peano's Numbers)in prolog?後繼算術Prolog調製函數
如何編寫mod/3函數後繼算術(Peano's Numbers)in prolog?後繼算術Prolog調製函數
認爲它是這樣的:
如果你想找到的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編輯請求。
雖然這段代碼可能有助於解決問題,但它並沒有解釋_why_和/或_how_它是如何回答問題的。提供這種附加背景將顯着提高其長期教育價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 –