Write a function magic_square :: [[Int]] -> Bool
, which
takes a 2-dimensional (Square!) list, and returns True if the
parameter is a magic square. For simplicity sakes, we will assume a
square is magic if all of the rows, and all of the columns sum to
the same value.
To make writing this function easier, define
functions sum_column :: [[Int]] -> Int -> Int
, and
sum_row :: [[Int]] -> Int -> Int
. Both of these
functions take "2" parameters (using curring). They take a
2-dimensional (again, Square!) list of Integers, and an Integer
index. It they should return the sum of the elements along the
specified column and row, respectively.
You may need to define more helper functions! I personally wrote at least 4 more functions, but you could easily reduce that. It may result in some uglier looking code, but it is doable!
Time permitting, add in a clause to check the diagonals as well. In a real magic square, the diagonals should sum to the same values as the rows and columns! If you're really bored, you could also write a prolog program to generate such magic squares!