gpt4 book ai didi

list - Haskell - 是否存在替换功能?

转载 作者:行者123 更新时间:2023-12-04 23:56:06 24 4
gpt4 key购买 nike

我必须制作三个函数来替换扁平字符串和列表。

我不知道,是否有像其他语言一样的替换功能。我搜索了但是不幸的是没有成功:-(

所以我的尝试还很薄弱。

第一个函数:

replace  ::  String  ->  String  ->  String  ->  String
replace findStr replaceStr myText = replace()??

我的第一个函数的方法:
replace :: String -> String -> String -> String
replace [] old new = []

replace str old new = loop str
where
loop [] = []
loop str =
let (prefix, rest) = splitAt n str
in
if old == prefix -- found an occurrence?
then new ++ loop rest -- yes: replace

else head str : loop (tail str) -- no: keep looking
n = length old

第二个功能:
replaceBasedIdx ::  String  ->  [String]  ->  String  ->  String
replaceBasedIdx findStr replaceStrList myText = replace()???

此函数应将 myTxt 中的第一个 findStr 替换为 replaceStrList 的第一个元素,将第二个 findStr 替换为第二个元素,依此类推...

示例:
replaceBasedIdx   "a"  ["G","V","X"]  "Haskell is a language"
"HGskell is V lXnguage"

我的第二个函数的方法:
replaceBasedIdx    ::  String  ->  [String]  ->  String  ->  String
replaceBasedIdx findStr replaceStrList myText = replaceBasedIdxSub findStr replaceStrList myText 0

replaceBasedIdxSub :: String -> [String] -> String -> Int -> String
replaceBasedIdxSub findStr replaceStrList myText counter = loop myText
where
loop [] = []
loop myText =
let (prefix, rest) = splitAt n myText
in
if findStr == prefix -- found an occurrence?
then (replaceStrList !! (counter+1)) ++ loop rest -- yes: replace it

else head myText : loop (tail myText) -- no: keep looking
n = length findStr

我现在非常接近最终结果,但是计数器没有增加。

你能告诉我,我的错误在哪里吗?
我怎么能修改第一个或第二个函数来获得第三个函数?

第三个功能:
replaceBasedIdxMultiple  ::  [String]  ->  [String]  ->  String  ->  String
replaceBasedIdxMultiple findStrList replaceStrList myText = replace()???

这个函数应该用replaceStrList中的对应元素替换myTxt中findStrList的每个元素,所以1.用1.,2.用2.等等......

示例:
replaceBasedIdxMultiple ["A","X","G"] ["N","Y","K"]  "ABXMG"
"NBYMK"

你能帮我解决这个问题吗?一些提示和提示,如何开始?

我真的很不一样:-(

非常感谢提前

亲切的问候!

最佳答案

replace存在于 Data.List.Utils , MissingH 的一部分包裹。

实际上,这是一个非常简洁的实现:

replace :: Eq a => [a] -> [a] -> [a] -> [a]
replace old new = join new . split old

关于list - Haskell - 是否存在替换功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16426680/

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