このディレクトリの索引

# 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,_z) :- between(1,_ピタゴラス数要素の上限,_x), between(1,_ピタゴラス数要素の上限,_y), between(1,_ピタゴラス数要素の上限,_z). 'ピタゴラス数は_zを直角三角形の斜辺_x,_yを直角の隣辺とした時の制約を持つ'(_x,_y,_z) :- ピタゴラスの定理を適用する(_x,_y,_z). ピタゴラスの定理を適用する(_x,_y,_z) :- '直角の隣辺の二乗の和は斜辺の二乗に等しい'(_x,_y,_z). '直角の隣辺の二乗の和は斜辺の二乗に等しい'(_x,_y,_z) :- '直角の隣辺の二乗の和は'(_x,_y,_直角の隣辺の二乗の和), '斜辺の二乗に'(_z,_斜辺の二乗), 等しい(_直角の隣辺の二乗の和,_斜辺の二乗). '直角の隣辺の二乗の和は'(_x,_y,_直角の隣辺の二乗の和) :- _直角の隣辺の二乗の和 is _x * _x + _y * _y. '斜辺の二乗に'(_z,_斜辺の二乗) :- _斜辺の二乗 is _z * _z. 等しい(X,Y) :- X =:= Y. % 関連解答 % http://nojiriko.asia/prolog/pythagorean_su.html % http://nojiriko.asia/prolog/pythagorean_su_2.html % http://nojiriko.asia/prolog/pythagorean_su_3.html