我試圖通過1功能上用分隔符分隔字符串的最佳方法是什麼?
寫在Haskell程序,將採取由逗號定界整數一串數字,將其轉換爲整數的列表,並增加每個號碼例如 "1,2,-5,-23,15" -> [2,3,-4,-22,16]
下面是生成的程序
import Data.List
main :: IO()
main = do
n <- return 1
putStrLn . show . map (+1) . map toInt . splitByDelimiter delimiter
$ getList n
getList :: Int -> String
getList n = foldr (++) [] . intersperse [delimiter] $ replicate n inputStr
delimiter = ','
inputStr = "1,2,-5,-23,15"
splitByDelimiter :: Char -> String -> [String]
splitByDelimiter _ "" = []
splitByDelimiter delimiter list =
map (takeWhile (/= delimiter) . tail)
(filter (isPrefixOf [delimiter])
(tails
(delimiter : list)))
toInt :: String -> Int
toInt = read
對我來說,最困難的部分是一個字符串並將返回字符串
列表的功能splitByDelimiter
編程
"1,2,-5,-23,15" -> ["1","2","-5","-23","15"]
認爲它工作,我不滿意它的寫法。有很多括號,所以它看起來像Lisp。同樣的算法是有點人爲:
前面加上分隔字符串的開頭
",1,2,-5,-23,15"
生成所有的尾巴
[",1,2,-5,-23,15", "1,2,-5,-23,15", ",2,-5,-23,15", .... ]
過濾器的列表,只留下與分隔符開頭的字符串
[",1,2,-5,-23,15", ",2,-5,-23,15", .... ]
放下第一個分隔符並採用符號,直到達到下一個分隔符
["1", "2", .... ]
所以問題是:
我怎樣才能改善功能splitByDelimiter
?
我可以刪除前綴和刪除分隔符並直接拆分字符串嗎?
如何重寫函數以減少括號?
可能我錯過了一些東西,並且已經有了這個功能的標準功能?
`foldr相似(++)[] `也被稱爲`concat`,`putStrLn。 show`也被稱爲`print`。另外,`n < - return 1`有點奇怪;你可以做'讓n = 1'並避免包裝和解開monad。 – pat 2013-02-27 02:36:30
可能的重複[如何在Haskell中拆分字符串?](http://stackoverflow.com/questions/4978578/how-to-split-a-string-in-haskell) – 2014-07-02 15:39:42