Вызывая ?- countFruit(H,0).
, вы говорите прологу унифицировать переменную No
в вашем предикате countfruit\2
до 0
.Таким образом, результат может быть только 0
или fail
.
Если я запустил ваш код как есть, я получу следующее:
>>NoofFruits:0
Yes.
Вот мое мнение об этомпроблема:
countFruit(Xs, No) :-
countFruit(Xs, No, 0).
countFruit([], No, No).
countFruit([H|T], No, X0) :-
member(H, [apple, orange, pear, grape, lycee, pineapple, dragonfruit]),
!,
X1 is X0 + 1,
countFruit(T, No, X1).
countFruit([_|T], No, X) :-
countFruit(T, No, X).
?- countFruit([orange, dog, dragonfruit, lycee], X),
write(" >> No of Fruits : "),
write(X),
nl,
fail.