钻石 kata 以字母作为输入,并输出一个钻石形状。 给定一个字母,它会打印一个以 'A' 开头、最宽处为所给字母的钻石。
在下面的示例中,空格用·字符表示。
字母 'A' 的钻石:
A
字母 'C' 的钻石:
··A··
·B·B·
C···C
·B·B·
··A··
字母 'E' 的钻石:
····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····
你需要实现 diamond 函数,它会打印一个菱形:从 A 开始,最宽处为给定的字符。如果不确定类型,可以使用提供的签名,但别让它限制你的创造力:
diamond :: Char -> Maybe [String]
本练习处理的是文本数据。由于历史原因,Haskell 的 String 类型等同于 [Char],也就是一个字符数组。若要更高效地处理文本数据,可以使用 Text 类型。
作为本练习的可选扩展,你可以
import qualified Data.Text as T
import Data.Text (Text)
diamond :: Char -> Maybe [Text] 这样的代码,并以 T.pack 这样的方式引用 Data.Text 的组合子,Data.Text 的文档,String 都替换成 Text:diamond :: Char -> Maybe [Text]
这部分完全是可选的。