我怎样才能编写这段代码而不重复(c !! x)
x = [0..7]在哪里,使用列表理解更好,但我不知道如何编写它
show (EOBoard f c r) = "EOBoard\n" ++ "Foundations "
++ show f ++ "\n" ++ "Columns \n"
++ show (c!!0) ++ "\n" ++ show (c!!1) ++ "\n"
++ show (c!!2) ++ "\n" ++ show (c!!3) ++ "\n"
++ show (c!!4) ++ "\n" ++ show (c!!5) ++ "\n"
++ show (c!!6) ++ "\n" ++ show (c!!7) ++ "\n"
++ "Reserves " ++ show r
Run Code Online (Sandbox Code Playgroud)
让我们首先摆脱所有这些手动换行符。
import Data.List
show (EOBoard f c r) = intercalate "\n" $
[ "EOBoard"
, "Foundations " ++ show f
, "Columns"
, show (c!!0)
, show (c!!1)
, show (c!!2)
, show (c!!3)
, show (c!!4)
, show (c!!5)
, show (c!!6)
, show (c!!7)
, "Reserves " ++ show r]
Run Code Online (Sandbox Code Playgroud)
注意:如果您也想在末尾换行,请使用unlines
代替intercalate
。
正如您所注意到的,有一个相当重复的部分。此外,这些!!
应用程序有点昂贵。列表理解解决了这两个问题,但我会使用map
它。
show (EOBoard f c r) = intercalate "\n" $
[ "EOBoard"
, "Foundations " ++ show f
, "Columns" ] ++
map show c ++
["Reserves " ++ show r]
Run Code Online (Sandbox Code Playgroud)
(如果您愿意,map show c
可以替换为。)[show x | x <- c]
还有一点好笑;Show
确实不适合漂亮的打印。show
不应插入换行符。您可能实际上想编写一个自定义的漂亮打印函数。