3 または 5 で割り切れるリスト内のすべての数値の 2 乗和を求める 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 は、取得する必要がある唯一の出力です