gpt4 book ai didi

string - 学习 Haskell : String manipulation question

转载 作者:行者123 更新时间:2023-12-04 16:15:10 24 4
gpt4 key购买 nike

如何在 Haskell 中编写一个函数,该函数接受格式为 a1a2a3 的输入字符串并扩展为 a1a2a2a3a3a3。例如输入字符串“code”将扩展为“coodddeeee”

最佳答案

所以你想要 nth字符重复 n次。

f :: String -> String
f x = concatMap g (zip x [1..])
where
g (x,y) = replicate y x

我确信有一种更简单的方法可以做到这一点。

说明:首先我们获取字符串并将其与列表中的位置配对(从 1 开始)。这就是 zip 的作用:
Prelude> zip "code" [1..]
[('c',1),('o',2),('d',3),('e',4)]

现在函数 g (x,y)使用复制功能复制您想要的任何内容。所以我们复制 x, y 次。
Prelude> g ('z',4)
"zzzz"

如果我们将此函数映射到生成的列表上,您会得到结果:
Prelude> map g $ zip "code" [1..]
["c","oo","ddd","eeee"]

如果您有一个字符串列表,您可以使用 concat 将它们连接在一起。 . concatMap应用函数 g到每对字母和数字,然后将字符串连接到最终结果中。
Prelude> concat $ map g $ zip "code" [1..]
"coodddeeee"

基本上: concat $ map g -> concatMap g
编辑:现在它可以工作了,它也可以在一行中完成:
f x = concatMap (\(a,b)->replicate b a ) $ zip x [1..]

输出:
Prelude> f "lambda"
"laammmbbbbdddddaaaaaa"

关于string - 学习 Haskell : String manipulation question,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126846/

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