String Haskell,替换列表中给定单词的每一次出现

String Haskell,替换列表中给定单词的每一次出现,string,list,haskell,replace,String,List,Haskell,Replace,我被困在如何更改列表中给定的单词上 change :: Eq t => t -> t -> [t] -> [t] change x y z 该函数的工作原理应类似于给出单词x,并在z列表中将其替换为y 如更改“a”“c”“banana”,结果将是“bcncnc” 我应该如何递归地检查列表并更改单词的每次出现 我自己的尝试: change st nd [] = [] change st nd (x:xs) = if st == x then nd : xs else x

我被困在如何更改列表中给定的单词上

change :: Eq t => t -> t -> [t] -> [t]
change x y z
该函数的工作原理应类似于给出单词
x
,并在
z
列表中将其替换为
y

更改“a”“c”“banana”
,结果将是
“bcncnc”

我应该如何递归地检查列表并更改单词的每次出现

我自己的尝试:

change st nd [] = []
change st nd (x:xs) = if st == x then nd : xs else x : xs

对于当前代码,您仅更改此列表的第一个元素(如果它与
st
匹配),并将列表的其余部分添加到未更改的
xs
。您应该将
change
功能应用于列表的尾部。

对于当前代码,您只更改此列表的第一个元素(如果它与
st
匹配),并将列表的其余部分添加到未更改的
xs
。您应该在列表的尾部应用
change
函数。

subst st nd[]=[]subst st nd(x:xs)=如果st==x,那么nd:xs else x:xsI`我只是一个初学者,不熟悉Haskell中的递归函数,我不确定我哪里做错了~您的类型签名应该是
change::Eq t=>t->t->[t]>[t] 
是的,对不起,我刚才打错了。应该是change::Eq t=>t->t->[t]->[t]subst st nd[]=[]subst st nd(x:xs)=如果st==x,那么nd:xs else x:xsI`我只是一个初学者,不熟悉Haskell中的递归函数,我不确定我哪里做错了~你的类型签名应该是
change::Eq t=>t->t->[t]->[t]
是的,很抱歉,我在这一部分键入了错误。应该是change::Eq t=>t->t->[t]->[t]->[t]谢谢你的建议,我解决了那个问题,非常感谢!谢谢你的建议,我解决了那个问题,非常感谢!