{- 称一个三元组(x,y,z)是毕达哥拉斯三元组,如果x*x + y*y == z*z。例如,(3,4,5), (4,3,5), (6,8,10)等。 请定义一个函数 triads :: Int -> [(Int, Int, Int)] 使得triads n 给出[1 .. n]中的毕达哥拉斯三元组,如 > triads 5 [(3,4,5),(4,3,5)] > triads 13 [(3,4,5),(4,3,5),(5,12,13),(6,8,10),(8,6,10),(12,5,13)] -} triads :: Int -> [(Int, Int, Int)] triads n=[(x,y,z)|x<-[1..n],y<-[1..n],z<-[1..n],x*x+y*y==z*z] {- 以上结果中(3,4,5)和(4,3,5)实际上没有区别。请改进该函数,使得结果中不出现这种重复意义的三元组,实现函数 triads2 :: Int -> [(Int, Int, Int)] 使得 > triads2 5 [(3,4,5)] > triads2 13 [(3,4,5),(5,12,13),(6,8,10)] -} triads2 :: Int -> [(Int, Int, Int)] triads2 n=[(x,y,z)|x<-[1..n],y<-[x..n],z<-[y..n],x*x+y*y==z*z]