如何优雅地实现 blowup 函数呢?

发布于 2022-08-09 22:30:09 字数 413 浏览 7 评论 5

blowup 函数的定义如下:

“abc” ->"abbccc"
"abcd" -> "abbcccdddd"
....

我写了个实现,但是觉得不太优雅,有没有更直接更优雅一些的写法呢?

blowup :: String -> String
blowup [] = []
blowup xs = concat [take (fst x) (repeat (snd x)) | x <- zip [1..] xs]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

一人独醉 2022-08-22 03:26:24

与一楼的类似

  1. blowup xs = concat [take n (repeat c) | (c, n) <- zip xs [1..]]

复制代码

紫南 2022-08-22 02:22:23

我也来一个

  1. f (x:xs)= (return x) : (zipWith (:) xs (f xs))

复制代码

变身佩奇 2022-08-21 21:20:24

flw 兄一出手,果然,佩服,学习ing.

自在安然 2022-08-21 11:52:52

blowup = concat . zipWith replicate [1..]

两人的回忆 2022-08-18 03:42:05

或者下面这个实现?

blowup2 :: String -> String
blowup2 [] = []
blowup2 xs = (blowup2 . init) xs ++ take (length xs)  (repeat  (last xs) )

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文