调试简单的Prolog函数



我正试图在Prolog中编写我的on mod函数,签名为模(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 .

出于某种原因,当我运行这段代码时,它会给我一个"Arguments are not fully instantiated"错误。我是Prolog的新手,我想知道是否有人能帮我找出我做错了什么/如何修复它?

如有任何帮助,我们将不胜感激!提前谢谢!

您似乎试图让Prolog谓词返回truefalse。Prolog不是这样工作的。谓词要么成功,要么失败。他们什么都不回。

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

您需要涵盖的第一种情况是A < B

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

如果A < B与第一项和第三项相同,则该谓词应成功。

下一种情况是当A >= 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.

最新更新