f::Char->String->String
f ch str
|('a'<=ch&&ch<='z')=ch:str
|otherwise=str
输出对我来说似乎非常直观:
*Main> foldr f "END" "xYz1Ab"
"xzbEND"
*Main> foldr f "xYz1Ab" "END"
"xYz1Ab"
我的思路是“结束”是ch而“xYz1Ab”是str,所以foldr f "END" "xYz1Ab"
应该是“ENDxzb”而foldr f "xYz1Ab" "END"
被认为是“END”。有人可以向我解释一下吗?
答案 0 :(得分:1)
"END"
中没有任何字符与后卫('a'<=ch&&ch<='z')
匹配,因此不会附加。
foldr
的第二个参数是初始状态,它始终以str
传递,而不是ch
。