I am using SWI-Prolog V 6.2.3 on Windows 7. I have written the following predicates that calculate the absolute value and the square of an integer:
myabs(X,X):- X > = 0.
myabs(X,Y):- Y is -X.
mysq(X,S):- myabs(X,Y), S is Y * Y.
I get errors (operator error) for the following lines:
2 : Prolog does not seem to accept -X.
3 : Prolog does not seem to accept Y * Y (when replaced by 2 * 2, I don’t get error)
I understand there are built-in predicates for these functions, but as I am new, these are small programs that help me learn.
you have a typo in rule 1: remove the space after
>then, after correction:
Are you aware that myabs is not required for squaring?
edit as @false noted, also myabs/2 needs a correction, to prevent wrong results when input is positive and backtracking is involved. Adding a guard to second clause could do:
but I would prefer the if/then/else construct, i.e. replacing those 2 clauses with