У меня есть программа Prolog, которая предназначена для поиска суммы квадратов всех чисел в списке, делящемся на три или пять. Однако он возвращает более одного результата, и я не уверен, почему.Пролог рекурсивная программа, возвращающая слишком много результатов
% --divisibility tests--
div_test(N):-
% divisible by three?
0 is N mod 3.
div_test(N):-
% divisible by five?
0 is N mod 5.
% sum of an empty list is zero (base case)
square_sum([], Sum):-
Sum is 0.
% --recursive cases
square_sum([Head | Tail], Sum) :-
div_test(Head),
square_sum(Tail, TempSum),
Sum is Head*Head + TempSum.
square_sum([Head | Tail], Sum) :-
square_sum(Tail, TempSum),
Sum is TempSum.
Учитывая следующий входной:
?-square_sum([1,2,3,4,5],Sum).
я получаю следующий результат:
Sum = 34 ;
Sum = 9 ;
Sum = 25 ;
Sum = 0.
34 является единственным выходом я должен получить
Спасибо! Я понятия не имел о разрезе пролога ха-ха (я новичок в Prolog). Я посмотрю на лямбда-модуль :) – thegalah