I am writing a little program which counts how many elements in a list are not numbers. Here is my code:
not_number([],0).
not_number([X|T],R):-
not(number(X)),
R1 is R+1,
not_number(T,R1).
not_number([_|Tail],Result):-
not_number(Tail,Result).
If I execute code like this :
?- not_number([1,2,3,5], R).
I am getting that R = 0 (as it should be)
R = 0.
But if I put a character in the list:
?- not_number([1,2,3,5,a], R).
then I am getting this error:
ERROR: not_number/2: Arguments are not sufficiently instantiated
Exception: (10) not_number([a], _G247) ?
Can someone explain whats wrong with code? I am new to prolog.
R1 is R+1
whenR
isn't instantiated in the casenot_number([a], R)
. Your recursive case is strung a little backwards. You want to donot_number(T, R1), R is R1+1
. – Fallfishis
– Supremacy