理解Haskell中的高阶函数

时间:2017-04-25 13:46:15

标签: haskell higher-order-functions

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”。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:1)

"END"中没有任何字符与后卫('a'<=ch&&ch<='z')匹配,因此不会附加。

foldr的第二个参数是初始状态,它始终以str传递,而不是ch