recursion - Prolog - making a recursive divisor -
recursion - Prolog - making a recursive divisor -
okay, i'm beginner in prolog i'm sorry if can't quite question across i'm struggling:
divide_by(x, d, i, r) :- (d > x), 0, r x. divide_by(x, d, i, r) :- x >= d, x_1 x - d, i_1 + 1, divide_by(x_1, d, i_1, r), r x_1. i'm trying write programme take 2 arguments (x , d) , homecoming iterations (i) , remainder (r) can display result of x / d when user enters: divide_by(8,3,i,r). example.
when tracing code know wrong because first increment makes equal 0 , count wrong. don't know how declare 0 without resetting every time recurses through loop. (i don't want declare 0 in query)
i realised when has finished recursing (when x < d) going set 0 because of base of operations case.
would kind plenty show me how can prepare this?
you need introduce accumulator , utilize helper predicate, this:
divide(_,0,_,_) :- !, fail . % x/0 undefined , can't solved. divide(0,_,0,0) :- !. % 0/x 0. divide(x,y,q,r) :- % ordinary case, invoke divrem(x,y,0,q,r) % helper accumulator seeded 0 . divrem(x,y,q,q,x) :- % if x < y, we're done. x < y . % divrem(x,y,t,q,r) :- % otherwise... x >= y , % long x >= y, x1 x - y , % compute next x t1 t + 1 , % increment accumulator divrem(x1,y,t1,q,r) % recurse downwards . % easy! recursion prolog increment
Comments
Post a Comment