1
我正在寻找一种方法来替换Haskell中字符串的出现。我有这个工作单对。我现在的功能实现,像这样:替换Haskell中的字符串
replaceList :: (Eq a) => [a] -> ([a],[a]) -> [a]
replaceList [email protected](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”)将返回“我是渡渡鸟”。但是,我正在寻找一种方法来使这个函数接受这些图簇的列表。例如:
replaceList“我是龙”[(“I”,“You”),(“am”,“are”),(“a dragon”,“awesome”)]“You are真棒”。
迄今我尝试过的方法是将部分应用的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
由于常规。来自命令式语言的数据结构和迭代稍微简单一些,即使靠近,我也无法将我的头围绕在如何去做。我想我有点误解了作文,因为replaceInfinity(replaceList x y)是我试图用它做的。 – 2013-04-07 17:42:46
@Dymatic我得到了组合语句这样工作:'replaceInfinity x [] = x; replaceInfinity x(y:ys)=翻转replaceInfinity ys。 replaceList x $ y' – 2013-04-07 17:52:50