【问题标题】:Debugging Simple Prolog Function调试简单的 Prolog 函数
【发布时间】:2020-04-10 18:35:57
【问题描述】:

我正在尝试在 Prolog 中编写我的 on mod 函数,其签名为 modulo(A,B,C),其中 C 相当于 A mod B。这是我的代码:

modulo(A,B,A) :- A<B. /* Not sure about this part.*/

modulo(A,B,C) :-
A==C -> 
    true ;
    A>C ->
        A1 is A-B,
        modulo(A1,B,C) ;
        false .

由于某种原因,当我运行此代码时,它给了我一个“参数没有充分实例化”的错误。我对 Prolog 很陌生,我想知道是否有人可以帮我弄清楚我做错了什么/如何解决它?

任何帮助将不胜感激!提前谢谢!

【问题讨论】:

  • Prolog 没有功能。这可能是你的第一个错误。

标签: debugging prolog runtime-error


【解决方案1】:

您似乎试图让 Prolog 谓词返回 truefalse。这不是 Prolog 的工作方式。谓词要么成功,要么失败。他们不返回任何东西。

除此之外,您的代码很接近。

您需要介绍的第一种情况是A &lt; B

modulo(A,B,A) :- A < B.

如果A &lt; B 和第一项和第三项相同,那么这个谓词应该成功。

下一种情况是A &gt;= B

modulo(A,B,C) :-
    A >= B,
    A1 is A - B,
    modulo(A1,B,C).

就是这样。

请注意,我没有退回任何东西。我们只想说“这成功了吗”。

尝试?- modulo(7,7,1). 我得到No.,但尝试?- modulo(7,2,1). 我得到Yes.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多