我正在寻找一种方法来替换 Haskell 中出现的字符串。我有这个适用于单对。我当前的功能是这样实现的:
replaceList :: (Eq a) => [a] -> ([a],[a]) -> [a]
replaceList z@(x:xs) (a,b)
| take (length a) z == a = b ++ strt z (length a)
| otherwise = x : replaceList xs (a,b)
在这种情况下,strt 只是一个返回从某个索引开始的列表的函数。此功能有效。replaceList "Dragon" ("ragon","odo") 将返回 "I am a dodo"。但是,我正在寻找一种方法让这个函数接受这些元组的列表。例如:
replaceList "I am a dragon" [("I","You"),("am","are"),("a dragon","awesome")] 返回“你真棒”。
到目前为止,我尝试过的方法是将部分应用的 replaceList 映射到元组列表上,但这会返回每个更改的单个元素的列表。我也尝试使用此代码:
replaceInfinity :: (Eq a) => [a] -> [([a],[a])] -> [a]
replaceInfinity x [] = x
replaceInfinity x ((a,b):ys) = (flip replaceList (a,b)) . (replaceInfinity x ys)
但这无法编译。我对 Haskell 比较陌生,并且正在使用它来重写旧的语言预处理器。我无法理解如何实现此类功能的逻辑。
有人可以告诉我获得答案的策略,或者甚至为我实现该功能,以便我可以了解它是如何完成的吗?如果有帮助,我有整个源文件,我一直在这里玩这个:http: //hpaste.org/85363