Search code examples
prolog

Why is my function returning a negative value?


So I drew a simple function in prolog that counts how many of a variable are in a matrix.

And it goes like this :

:-use_module(library(lists)).
:-use_module(library(clpfd)).

countOccurrences([],Y,0).
countOccurrences([X|T], Y, Z):-
    countOccur(X, Y, N),
    Acc #=N + Z,
    countOccurrences(T, Y, Acc).    


countOccur([],X,0).
countOccur([X|T],X,Y):- countOccur(T,X,Z), Y is 1+Z.
countOccur([X1|T],X,Z):- X1\=X,countOccur(T,X,Z).

countOccur seems to be working fine and returns the right value. The problem is countOccurences is returning the right absolute value but negative. I Just dont seem to understand why that is happening.

Can someone enlighten me ?


Solution

  • An input of [[a,a,a,a]] looking for a does countOccurrences of a in [] and sets Acc = 0 and then countOccur of a in [a,a,a,a] sets N=4 then Acc #= N + Z becomes 0 #= 4 + Z and so the result must be Z = -4.