我想折叠一个字符串,使得在@之前出现的0被替换为"k"。因此,"a.@0.1.2.0" 变成了 "a.@k.1.2.0"。我该怎么做?到目前为止,我的尝试是:
test = foldl(\x acc-> if((last acc) == "@" && x == "0" then acc ++ "k" else acc ++ x)) "" "a.@0.1.2.0"
然而,它并没有生效。Foldl 期望的是字符串列表,但我提供的只是一个字符串。我该如何克服这个问题?
foldl
来解决这个问题。这明显是一个foldr
或者mapAccumL
的问题。使用foldl
会使得程序变慢。 - dfeuermapAccumL
对于列表来说就是一个折叠函数,可能是最简单的方法了。foldr
也可以实现,但有点棘手。 - dfeuer