私は現在、クラスの課題に取り組んでおり、要件の 1 つは、rotate90 という関数を作成することです。この関数は基本的に [[Char]] を受け取り、時計回りに 90 度回転します。
例えば:
type Picture = [[Char]]
pic :: Picture
pic = [ "123",
"456",
"789" ]
になる:
[ "741",
"852",
"963" ]
これまでの私のコードは次のようになります。
rotate90 :: Picture -> Picture
rotate90 (x:xs)
| (x:xs) == [] = []
| xs == [] && x /= [] = formRow ([[]]) (formCol x)
| xs /= [] = formRow (rotate90 xs) (formCol x)
formCol :: [Char] -> [[Char]]
formCol y = [[a] | a <- y]
formRow :: [[Char]] -> [[Char]] -> [[Char]]
formRow (x:xs) (y:ys)
| xs == [] || ys == [] = (x++y):[]
| otherwise = (x++y):formRow xs ys
現在、マトリックスの最初の「行」のみを出力します。これは、例から「741」です。残りを印刷するにはどうすればよいですか?