ピタゴラスのトリプルの定義に従って、3 タプル メンバー (a、b、c) の無限リストを返す次の関数を作成しました: a^2 + b^2 = c^2。特定のタプル (a、b、c) が有効なピタゴラスのトリプルかどうかを確認できる必要があります。これを行う方法は、関数を使用してタプルの無限リストを生成し、このリストelem
をチェックしたい 3 タプルと一緒に渡すことです。
ただし、これは、3 タプルが無限リストのメンバーと一致しても終了しません。
コード:
pythagoreanTriples::[(Integer, Integer, Integer)]
pythagoreanTriples = [(a, b, c) | a <- [2..], b <- [a+1..],
c <- [b+1..], a*a + b*b == c*c ]
main = do
print $ elem (30, 72, 78) (pythagoreanTriples)
上記の関数を修正して有限リストを生成しようとしたところ、ロジックが非常にうまく機能したため、ロジックが正しいことはわかっています。
pythagoreanTriples n = [(a, b, c) | a <- [2..n], b <- [a+1..n],
c <- [b+1..n], a*a + b*b == c*c ]
main = do
print $ elem (30, 72, 78) (pythagoreanTriples 100)
ただし、これは無限リストで行う必要があります。どうすればうまくいくか教えてください。ありがとう。