gpt4 book ai didi

string - 我应该如何重构这个 Haskell 代码以使其更加优雅?

转载 作者:行者123 更新时间:2023-12-02 01:57:17 24 4
gpt4 key购买 nike

作为练习,我编写了一个简短的 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:根据 ptiva 的评论将第二个模式从 xs 更改为 _。惰性评估 FTW。

更新 3:tew88 评论中的清洁 guard 。

最佳答案

concatFirstFour (a:b:c:d:_) = [a,b,c,d]
concatFirstFour _ = error "Need at least four characters."

concatFirstFour = take 4

但这最后一个并没有在短名单上失败......

<小时/>

另请注意,您不需要指定类型为 [Char](或 String),因为您从不在代码中使用此假设。让它成为 [a] -> [a]。

关于string - 我应该如何重构这个 Haskell 代码以使其更加优雅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com