2010-12-02 24 views
3

簡化難看函數I所定義的函數f1在Haskell

f1 p = foldl (\x y -> x ++ y ++ "\t") "" (map (foldl (++) "") p) 

,將採取

[["4","0","1"],["5","2","3"]] 

和屈服

"401\t523\t" 

但是一個功能,因爲它可以作爲難看得到。我相信有一個更簡單的方法來實現相同的功能。有人可以給我一些線索嗎?

回答

9

功能組成是你的朋友。所以插入,從Data.List

f1 = intercalate "\t" . map concat 

編輯:哎呀,誤讀你的輸出。你想要「\ t」在他們所有的結尾,而不是在他們之間。在這種情況下,它更接近

f1 = concat . map ((++ "\t") . concat) 
+0

最後不包括`'\ t``。 – dave4420 2010-12-02 22:36:59

3

作爲建議的方法解決類似這樣的東西在未來(supplimenting卡爾的實際解決方案),你可以做的是看如何哈斯克爾庫解決了問題。例如,Data.List.unwords做了類似於你想要的東西。

所以,你可以嘗試尋找到:

http://hackage.haskell.org/packages/archive/base/4.3.0.0/doc/html/Data-List.html

查找unwords本文檔中,你會發現有一個「源」鏈接。點擊它可以讓你瞭解圖書館如何實現它。通常,函數並不那麼大,可能會給你一些關於如何從庫中推廣(或專門化)你的函數的想法。