序言新手。
编辑:使用 swi-prolog
我想递归地执行乘法方法在序言中已经执行的操作,而不实际使用乘法方法。
我想要实现的算法看起来像:
multn(N1, N2, output){
if (n2 <=0) return output;
else
multn(N1, (N2-1), output + N1)
}
例如:4*4 = 4+4+4+4 = 16
编辑*:仅为此算法传递正数。
我的知识数据库看起来像:
multn(Num1, 0, Result) :- Result is 0.
multn(Num1, Num2, Result) :-
NewNum2 = Num2 - 1,
multn(Num1, NewNum2, NewResult),
Result is Num1 + NewResult.
但是,当我打电话时:
?- multn(2,2,R).
它会永远持续下去,为什么这不会在上述基本情况下停止?
非常感谢您的帮助。
对于整数算术,使用clpfd /questions/tagged/clpfd限制。所有严肃的 Prolog 系统都提供它们。例如,对于 SICStus Prolog,输入:- use_module(library(clpfd))
在您的初始化文件中,以使 CLP(FD) 约束在您的所有程序中可用。
使用 CLP(FD) 约束和一些小的修改,您的初始程序将变为:
int_int_prod(_, 0, 0).
int_int_prod(Num1, Num2, Result) :-
NewNum2 #= Num2 - 1,
int_int_prod(Num1, NewNum2, NewResult),
Result #= Num1 + NewResult.
现在的重点是:你显然意味着你的条款是相互的独家的.
Insert Num2 #> 0
在适当的地方这样做!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)