Haskellについて簡単な質問があります。私はLearnYoua Haskellをフォローしてきましたが、すべての辺が10以下で、三角形の辺の長さを計算するために使用される次のスニペットの実行順序/ロジックについて少し混乱しています。三角形の全周は24です:
[(a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2, a+b+c==24]
b
私を混乱させる部分は、とa
バインディングの上限拡張です。私が収集したものから、..c
と..b
は、同じ三角形の辺のセットの追加の順列(組み合わせ?)を削除するために使用されます。
で実行すると..c/b
、答えが得られます。
[(6,8,10)]
私が持っていないとき..c/b
:
[(a,b,c) | c <- [1..10], b <- [1..10], a <- [1..10], a^2 + b^2 == c^2, a+b+c==24]
最初に入力したときは入力しなかったので、次のようになりました。
[(8,6,10),(6,8,10)]
これは明らかに同じ三角形を表していますがa
、b
値が入れ替わっています。
それで、誰かがここで何が起こっているのかについての論理/実行/評価を私に教えてもらえますか?