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'的參數,但這當然是另一種類型的錯誤。 –