-1

如何在序言中为后继算术(皮亚诺数)编写mod/3函数?

4

1 回答 1

0

这样想:

如果你想找到 10 和 4 的 mod,你将 10 除以 4 并返回提醒。但是由于除法是多重减法,我们将在这里使用多重减法逻辑。

例如:10 mod 410-4 mod 4which is 6 mod 4which is 再次与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)).这使用多重减号逻辑。如果 first 从 first 中删除 second ,然后检查 first 是否小于第二个。如果是,递归调用 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 的编辑请求。

于 2016-10-17T04:58:06.277 回答