【问题标题】:Successor Arithmetic Prolog Mod function后继算术 Prolog Mod 函数
【发布时间】:2016-10-17 04:58:06
【问题描述】:

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

【问题讨论】:

    标签: prolog successor-arithmetics


    【解决方案1】:

    这样想:

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

    例如:10 mod 410-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)). 这使用多重减号逻辑。如果 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 的编辑请求。

    【讨论】:

    • 虽然这段代码可能有助于解决问题,但它并没有解释为什么和/或如何回答问题。提供这种额外的背景将显着提高其长期教育价值。请edit您的答案添加解释,包括适用的限制和假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多