作爲練習,我編寫了一個簡短的Haskell函數,它返回串聯的前四個字符。我很難將字符轉換爲字符串,並使用了一個醜陋的replicate
黑客。改進此功能的最佳方法是什麼? (我猜,這兩個模式和輸出得以提高。)我應該如何重構這個Haskell代碼以使它更優雅?
concatFirstFour :: [Char] -> [Char]
concatFirstFour (a:b:c:d:_) = (replicate 1 a) ++ (replicate 1 b) ++ (replicate 1 c) ++ (replicate 1 d)
concatFirstFour xs = error "Need at least four characters."
更新:謝謝你這麼多,大家好。我從所有的答案和評論中學到了幾件事。我更瞭解類型。
這裏是我最後使用的代碼:
initFirstFour :: [a] -> [a]
initFirstFour str
| length str > 3 = take 4 str
| otherwise = error "Need at least four characters."
更新2:從XS到每_ ptival的評論改變了第二圖案。懶惰eval FTW。
更新3:來自tew88的評論的清潔衛士。
'concatFirstFour :: [a] - > [a]'更好 – alternative 2011-04-01 21:09:13
請注意,您不需要在代碼的最後一行命名'xs',因爲參數在函數體中從不使用。你可以用wilcard'_'替換它 – Ptival 2011-04-01 23:58:28