后继算术Prolog Mod函数

时间:2016-10-17 04:58:06

标签: prolog successor-arithmetics peano-numbers

如何在prolog中为后继算术(Peano's Numbers)编写 mod / 3 函数?

1 个答案:

答案 0 :(得分:0)

这样想:

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

例如:10 mod 410-4 mod 4相同,6 mod 46-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的编辑请求。