我已经定义了函数f1
f1 p = foldl (\x y -> x ++ y ++ "\t") "" (map (foldl (++) "") p)
将采取
[["4","0","1"],["5","2","3"]]
和收益
"401\t523\t"
但是它是一个丑陋的功能。我确信有一种更简单的方法来实现相同的功能。有人能给我一些线索吗?
答案 0 :(得分:9)
功能组合是你的朋友。所以是从Data.List
插入的f1 = intercalate "\t" . map concat
编辑:哎呀,误读你的输出。你想要“\ t”在所有这些结尾,而不仅仅是它们之间。在这种情况下,它更接近
f1 = concat . map ((++ "\t") . concat)
答案 1 :(得分:3)
作为方法在未来解决类似问题的建议(赞助Carl的实际解决方案),您可以做的是查看Haskell库如何解决问题。例如,Data.List.unwords
执行类似于您想要的操作。
所以,你可以尝试一下:
http://hackage.haskell.org/packages/archive/base/4.3.0.0/doc/html/Data-List.html
在本文档中查找unwords
,您会发现存在“来源”链接。单击那里将带您了解库如何实现它的来源。通常,函数不是那么大,可能会给你一些关于如何从库中推广(或专门化)函数的想法。