Ani*_*il 0 haskell functional-programming function
我想写一个函数,它接受一个字符串并用7替换字符串中的任何数字.例如,"foo123"将被替换为"foo777"
这是我的功能.
replace [] = []
replace (x:xs) =
if x == ['0'..'9']
then '7' : replace xs
else x : replace xs
Run Code Online (Sandbox Code Playgroud)
==不测试if是否x是列表的元素; 它会检查是否x是等于到列表中.请改用此elem功能.
replace [] = []
replace (x:xs) =
if x `elem` ['0'..'9']
then '7' : replace xs
else x : replace xs
Run Code Online (Sandbox Code Playgroud)
if是一个纯表达式,可以在任何可以使用其他表达式的地方使用,因此您不需要重复递归调用xs:
replace [] = []
replace (x:xs) = (if x `elem` ['0'..'9'] then '7' else x) : replace xs
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用map而不是使用显式递归.
replace xs = map (\x -> if x `elem` ['0'..'9'] then '7' else x) xs
Run Code Online (Sandbox Code Playgroud)
要不就
replace = map (\x -> if x `elem` ['0'..'9'] then '7' else x)
Run Code Online (Sandbox Code Playgroud)
您可能想要使用Data.Char.isDigit:
import Data.Char
replace = map (\x -> if isDigit x then '7' else x)
Run Code Online (Sandbox Code Playgroud)