我正试图在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谓词返回true
或false
。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.
。