概要
Haskell を触ってみて、掲題のことをやって感動したのでメモ。
関数型の良さを最初に実感した例。
本編
-- 3辺を短い順に出力
rightAngleTriangle x = take x [[c, b, a] | a <- [1..],
b <- [1..a],
c <- [1..b],
a^2 == b^2 + c^2]
使ってみると
ghci> rightAngleTriangle 10
[[3,4,5],[6,8,10],[5,12,13],[9,12,15],[8,15,17],[12,16,20],[15,20,25],[7,24,25],[10,24,26],[20,21,29]]
手続き型言語での実装をイメージして、それを↑と比較すると、あまりの違いに愕然とする。