Haskell中如何用列表推导式避免重复书写(c!!x)代码
列表推导式实现方案
用遍历0~7索引的列表推导式生成所有列的展示行,再用concat拼接即可,优化后代码如下:
show (EOBoard f c r) = "EOBoard\n" ++ "Foundations " ++ show f ++ "\n" ++ "Columns \n" ++ concat [show (c !! x) ++ "\n" | x <- [0..7]] ++ "Reserves " ++ show r
补充优化建议
如果可以保证列表c的长度恰好为8,也可以直接遍历c的元素实现,不需要手动处理索引,避免潜在的越界风险,写法更简洁:
show (EOBoard f c r) = "EOBoard\n" ++ "Foundations " ++ show f ++ "\n" ++ "Columns \n" ++ concat [show col ++ "\n" | col <- c] ++ "Reserves " ++ show r
内容的提问来源于stack exchange,提问作者Jokar0902
相关产品推荐
相关产品推荐

