次のように、2 つ (または 3 つ) の無限リストを繰り返し、条件を満たす「最小」のペアを見つけたいと考えています。
until pred [(a,b,c) | a<-as, b<-bs, c<-cs]
where pred (a,b,c) = a*a + b*b == c*c
as = [1..]
bs = [1..]
cs = [1..]
上記は a == b == 1
、プログラムの実行中ずっと、それほど遠くまでは行きません。たとえば、無限シーケンスを構築するなど、問題を一致させる良い方法はあります[(1,1,1),(1,2,1),(2,1,1),(2,1,2),(2,2,1),(2,2,2),(2,2,3),(2,3,2),..]
か?
ボーナス: n タプルに一般化することは可能ですか?