Keep getting the error Arguments are not sufficiently instantiated for the multiplication by addition rule I wrote as shown below.
mult(_, 0, 0). %base case for multiplying by 0
mult(X, 1, X). % another base case
mult(X, Y, Z) :-
Y > 1,
Y1 is Y - 1,
mult(X, Y1, Z1),
Z is X + Z1.
I am new to Prolog and really struggling with even such simple problems.
Any recommendations for books or online tutorials would be great.
I am running it on SWI-Prolog on Ubuntu Linux.
I think you got the last two calls reversed. Don’t you mean:Edit: nevermind that, looked at the code again and it doesn’t make sense. I believe your original code is correct.
As for why that error is occuring, I need to know how you’re calling the predicate. Can you give an example input?
The correct way of calling your predicate is
mult(+X, +Y, ?Z):etc. Calling it with a free variable in the first two arguments will produce that error, because one of them will be used in the right side of an
isor in either side of the<, and those predicates expect ground terms to succeed.