%
% ex81.pl - 「6. 簡単なパズル(?)を解かせる」の1.
%

% gennum1/1 - 一桁の数値生成
gennum1(0).
gennum1(1).
gennum1(2).
gennum1(3).
gennum1(4).
gennum1(5).
gennum1(6).
gennum1(7).
gennum1(8).
gennum1(9).

% AからDまでの数値を生成してから加算し、結果を10と比較する。
sum10(A, B, C, D) :-
    gennum1(A),
    gennum1(B),
    gennum1(C),
    gennum1(D),
    10 is A + B + C + D.

% 一々手でバックトラックを指示するのは面倒なので、自動的にバックトラック
% しながら、画面に表示させる述語も定義しておく。
all_sum10 :-
    sum10(A, B, C, D),
    writeln([A, B, C, D]),
    fail.
all_sum10.
