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]谢谢你的建议,我解决了那个问题,非常感谢!谢谢你的建议,我解决了那个问题,非常感谢!