0
f::Char->String->String
f ch str
|('a'<=ch&&ch<='z')=ch:str
|otherwise=str
输出了解高阶函数似乎真的反直觉对我说:在Haskell
*Main> foldr f "END" "xYz1Ab"
"xzbEND"
*Main> foldr f "xYz1Ab" "END"
"xYz1Ab"
我的思绪列车是“结束”是CH和“xYz1Ab”是海峡,所以foldr f "END" "xYz1Ab"
是应该是“ENDxzb”,并且foldr f "xYz1Ab" "END"
被假定为“END”。谁可以给我解释一下这个?
但声明是f ch str,输入是f“END”“xYz1Ab”,不应该对应于“END”,str是“xYz1Ab”? – user3358850
但是你没有写'f“END”“xYz1Ab”',你写了'foldr f“END”“xYz1Ab”'。在第一种情况下,这两个字符串是'f'函数的参数(不考虑'f'的第一个参数应该是一个'Char',而不是'String')。在第二种情况下,'f',''END“'和'”xYz1Ab“'都是'foldr'函数的参数。如果你写了'foldr(f“END”“xYz1Ab”)',那么这些字符串就是'f'的参数,但这当然是另一种类型的错误。 –