假设我有一个字符串“HELLO WORLD”,有没有办法调用一个函数,用字符“X”替换字符串中的字符“O”,这样新的字符串看起来就像“HELLX WXRLD”?
m1m5dgzv1#
不如这样:
let repl 'o' = 'x' repl c = c in map repl "Hello World"
如果以后需要替换其他字符,只需向repl函数添加子句即可。
repl
nbysray52#
抱歉,我又提起了这个老主题,但为什么不使用lambda表达式呢?
λ> let replaceO = map (\c -> if c=='O' then 'X'; else c) λ> replaceO "HELLO WORLD" "HELLX WXRLD"`
pinkon5k3#
第一:
import Data.List.Utils (replace)
然后使用:
replace "O" "X" "HELLO WORLD"
一个有趣的混蛋:
import Control.Monad (mfilter) replace a b = map $ maybe b id . mfilter (/= a) . Just
示例:
λ> replace 'O' 'X' "HELLO WORLD" "HELLX WXRLD"
阿蒙的建议可能是最好的,我相信!没有进口和易于阅读和理解!但要挑剔-有没有分号的必要:
replace :: Eq a => a -> a -> [a] -> [a] replace a b = map $ \c -> if c == a then b else c
kse8i1jr4#
下面是另一个使用分治法的可能解决方案:
replaceO [] = [] replaceO (x:xs) = if x == 'O' then 'X' : replaceO xs else x : replaceO xs
首先,设置边界条件"replaceO [] = []"。如果列表为空,则没有要替换的内容,并返回空列表。接下来,我们将字符串分为head和tail,在本例中为'H':"ELLOWORLD"如果头等于'O',它将用'X'替换它,并对字符串的其余部分应用replaceO函数。如果头不等于'O',那么它会把头放回原处,并对字符串的其余部分应用replaceO函数。
"replaceO [] = []"
'H':"ELLOWORLD"
7uhlpewt5#
如果您依赖于text包(像99.99%的Haskell应用程序一样),您可以使用T.replace:
text
T.replace
>>> replace "ofo" "bar" "ofofo" "barfo"
ua4mk5z46#
replace :: Char -> Char -> String -> String replace _ _ [] = [] replace a b (x : xs) | x == a = [b] ++ replace a b xs | otherwise = [x] ++ replace a b xs
我是Haskell的新手,我试图让它对像我这样的人来说更简单。
clj7thdc7#
我想这可能有用。
main = print $ charRemap "Hello WOrld" ['O','o'] ['X','x'] charRemap :: [Char] -> [Char] -> [Char] -> [Char] charRemap [] _ _ = [] charRemap (w:word) mapFrom mapTo = if snd state then mapTo !! fst state : charRemap word mapFrom mapTo else w : charRemap word mapFrom mapTo where state = hasChar w mapFrom 0 hasChar :: Char -> [Char] -> Int -> (Int,Bool) hasChar _ [] _ = (0,False) hasChar c (x:xs) i | c == x = (i,True) | otherwise = hasChar c xs (i+1)
7条答案
按热度按时间m1m5dgzv1#
不如这样:
如果以后需要替换其他字符,只需向
repl
函数添加子句即可。nbysray52#
抱歉,我又提起了这个老主题,但为什么不使用lambda表达式呢?
pinkon5k3#
第一:
然后使用:
一个有趣的混蛋:
示例:
阿蒙的建议可能是最好的,我相信!没有进口和易于阅读和理解!
但要挑剔-有没有分号的必要:
kse8i1jr4#
下面是另一个使用分治法的可能解决方案:
首先,设置边界条件
"replaceO [] = []"
。如果列表为空,则没有要替换的内容,并返回空列表。
接下来,我们将字符串分为head和tail,在本例中为
'H':"ELLOWORLD"
如果头等于'O',它将用'X'替换它,并对字符串的其余部分应用replaceO函数。
如果头不等于'O',那么它会把头放回原处,并对字符串的其余部分应用replaceO函数。
7uhlpewt5#
如果您依赖于
text
包(像99.99%的Haskell应用程序一样),您可以使用T.replace
:ua4mk5z46#
我是Haskell的新手,我试图让它对像我这样的人来说更简单。
clj7thdc7#
我想这可能有用。