我想在Haskell中編寫一個程序來按分隔符分割字符串。Haskell - 按分隔符分割字符串
我研究了其他用戶提供的不同示例。下面發佈的代碼就是一個例子。
split :: String -> [String]
split [] = [""]
split (c:cs)
| c == ',' = "" : rest
| otherwise = (c : head rest) : tail rest
where
rest = split cs
樣本輸入:"1,2,3"
。 採樣輸出:["1","2","3"]
。
我一直在嘗試修改代碼,以便輸出結果類似於["1", "," , "2", "," , "3"]
,它在輸出中也包含分隔符,但我無法成功。
例如,我改變了行:
| c == ',' = "" : rest
成:
| c == ',' = "," : rest
但結果變得["1,","2,","3"]
。
問題出在哪裏,我誤解了哪部分?
而不是簡單地改變代碼,使其符合您的規範,你可能更好的目的是理解發生了什麼。你能用你自己的話來描述'split'是如何工作的嗎? –
根據我的理解,示例代碼中有兩部分。第一部分split [] = [「」]是我們試圖分割空字符串時返回包含一個空字符串的列表的基本情況。第二部分類似於遞歸,它遍歷輸入中的每個字符。如果該字符是分隔符,則它會將空字符串「」與字符串的剩餘部分的拆分結果組合。但我不確定「|否則=(c:頭部休息):尾部休息」功能。因爲c是字符,但「頭部休息」應該返回一個字符串。 –
您可以簡單地爲此功能執行'split = map pure' – Redu