このディレクトリの索引 # x^2+y^2=z^2を満たす正の整数をピタゴラス数と呼び、三つ組(x,y,z)で表す。 # ピタゴラス数のリストを生成する関数pythsを定義せよ。 # ただし、ピタゴラス数の要素は、与えられた上限以下であるとする。 # ピタゴラス数ならび(_ピタゴラス数要素の上限,_ピタゴラス数ならび) :- findall([_x,_y,_z],( ピタゴラス数(_ピタゴラス数要素の上限,_x,_y,_z)), _ピタゴラス数ならび). ピタゴラス数(_ピタゴラス数要素の上限,_x,_y,_z) :- '_x,_y,_zの候補は'(_要素値上限,_x,_y,_z), 'ピタゴラス数は_zを直角三角形の斜辺_x,_yを直角の隣辺とした時の制約を持つ'(_x,_y,_z). '_x,_y,_zの候補は'(_ピタゴラス数要素の上限,_x,_y,_x) :- for(1,_x,_ピタゴラス数要素の上限), for(1,_y,_ピタゴラス数要素の上限), for(1,_z,_ピタゴラス数要素の上限), 'ピタゴラス数は_x,_yを三角形の短辺_zを長辺とした時の制約を持つ'(_x,_y,_z). 'ピタゴラス数は_zを直角三角形の斜辺_x,_yを直角の隣辺とした時の制約を持つ'(_x,_y,_z) :- ピタゴラスの定理を適用する(_x,_y,_z). ピタゴラスの定理を適用する(X,Y,Z) :- Z * Z =:= X * X + Y * Y. 'ピタゴラス数は_x,_yを三角形の短辺_zを長辺とした時の制約を持つ'(_x,_y,_z) :- _z > _x, _z > _y, _z < _x + _y. % 関連解答 % http://nojiriko.asia/prolog/pythagorean_su.html % http://nojiriko.asia/prolog/pythagorean_su_2.html