我目前正在Prolog中制定一個程序,該程序將計算一個數字的所有倍數(包括其自身),該數字不超過另一個數字的值。我正在使用以下查詢進行測試: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 =
此外'R'將**從未統一。這總是會導致「錯誤」。 –