【发布时间】:2017-07-15 18:48:26
【问题描述】:
我目前正在 Prolog 中制作一个程序,该程序将计算一个数字的所有倍数(包括它自己),不超过另一个数字的值。我正在使用以下查询进行测试:
?- multiples(4,12,R,0)
此查询将列出所有小于或等于 12 的 4 的倍数,例如。 4, 8, 12. R 将返回结果,而 0 是我打算实现的计数器,该计数器将为每次乘法计数,例如。 4*1,4*2,4*3。我被卡住了,我不确定简单地添加倍数并检查它是否低于上限或者是否可以使用计数器或累加器来完成是否是一个更好的设计。
multiples(N,U,R,Ctr) :-
N =< U,
R is Ctr * N,
R =< U,
increment(Ctr,Ctr2),
multiples(N,U,R,Ctr2).
increment(Num, Num1) :-
Num1 is Num+1.
我相信我的程序在从自身内部调用倍数的递归步骤中失败了。我知道递归需要一个基本情况才能退出,但我完全被困在这里,希望能有一些方向。
【问题讨论】:
-
N =< U不用勾选,我认为Ctrl应该以1开头。 -
此外,
R将永远统一。这将始终导致false。
标签: prolog