簡化難看函數I所定義的函數f1
在Haskell
f1 p = foldl (\x y -> x ++ y ++ "\t") "" (map (foldl (++) "") p)
,將採取
[["4","0","1"],["5","2","3"]]
和屈服
"401\t523\t"
但是一個功能,因爲它可以作爲難看得到。我相信有一個更簡單的方法來實現相同的功能。有人可以給我一些線索嗎?
簡化難看函數I所定義的函數f1
在Haskell
f1 p = foldl (\x y -> x ++ y ++ "\t") "" (map (foldl (++) "") p)
,將採取
[["4","0","1"],["5","2","3"]]
和屈服
"401\t523\t"
但是一個功能,因爲它可以作爲難看得到。我相信有一個更簡單的方法來實現相同的功能。有人可以給我一些線索嗎?
功能組成是你的朋友。所以插入,從Data.List
f1 = intercalate "\t" . map concat
編輯:哎呀,誤讀你的輸出。你想要「\ t」在他們所有的結尾,而不是在他們之間。在這種情況下,它更接近
f1 = concat . map ((++ "\t") . concat)
作爲建議的方法解決類似這樣的東西在未來(supplimenting卡爾的實際解決方案),你可以做的是看如何哈斯克爾庫解決了問題。例如,Data.List.unwords
做了類似於你想要的東西。
所以,你可以嘗試尋找到:
http://hackage.haskell.org/packages/archive/base/4.3.0.0/doc/html/Data-List.html
查找unwords
本文檔中,你會發現有一個「源」鏈接。點擊它可以讓你瞭解圖書館如何實現它。通常,函數並不那麼大,可能會給你一些關於如何從庫中推廣(或專門化)你的函數的想法。
最後不包括`'\ t``。 – dave4420 2010-12-02 22:36:59