Search code examples
recursionprologfactorial

prolog factorial recursion giving expression as output


I've written a prlog recursive factorial clause which is:

factorial(X,Y):-
      (X>1)
   -> factorial(X-1,X*Y)
   ;  write(Y).

The problem is, for any valid call[for example, factorial(5,1). ], it is giving an expression rather than a value[(5-1-1-1)* ((5-1-1)* ((5-1)* (5*1)))]. How can I get a value rather than an expression.


Solution

  • The comment by @lurker is a bit simplistic. Comparison operators do evaluate expressions. So, your code could be made to work:

    factorial(X,Y):- X>1 -> factorial(X-1,F), Y=X*F ; Y=1.
    
    ?- factorial(5,X),F is X.
    X = 5*((5-1)*((5-1-1)*((5-1-1-1)*1))),
    F = 120.