このディレクトリの索引

#  x^2+y^2=z^2を満たす正の整数をピタゴラス数と呼び、三つ組(x,y,z)で表す。
#  ピタゴラス数のリストを生成する関数pythsを定義せよ。
#  ただし、ピタゴラス数の要素は、与えられた上限以下であるとする。
#  

ピタゴラス数ならび(_要素値上限,_ピタゴラス数ならび) :-
        findall([_x,_y,_z],(
                    ピタゴラス数(_要素値上限,_x,_y,_z)),
                _ピタゴラス数ならび).


ピタゴラス数(_要素値上限,_x,_y,_z) :-
        '1から_要素値上限までの整数リストを生成'(_要素値上限,L),
        重複組合せ(L,3,[X,Y,_z]),
        'X,Y,を三角形の短辺、_zを長辺だとみなすことができる'(X,Y,_z),
        ピタゴラスの定理を適用する(X,Y,_z),
        短辺はひっくり返すことも可能(X,Y,_x,_y).

'1から_要素値上限までの整数リストを生成'(_要素値上限,L) :-
        findall(N,for(1,N,_要素値上限),L).

'X,Y,を三角形の短辺、_zを長辺だとみなすことができる'(X,Y,_z) :-
        _z > X,
        _z > Y,
        _z < X + Y.

ピタゴラスの定理を適用する(X,Y,Z) :-
        Z * Z =:= X * X + Y * Y.

短辺はひっくり返すことも可能(_x,_x,_x,_x) :- !.
短辺はひっくり返すことも可能(_x,_y,_x,_y).
短辺はひっくり返すことも可能(_y,_x,_x,_y).