sumListV3
如何運作? myFoldr
需要3個參數:函數,基數大小寫和列表。然而它以某種方式知道列表(基於你的輸入),即使它在內部代碼中從未被指定過。鬼怪haskell功能,不知何故知道你的輸入
我認爲sumListV2
是最簡單的。 sumListV3
如何編譯,更不用說功能正常?
myFoldr :: (a -> b -> b) -> b -> [a] -> b
myFoldr _ baseCase [] = baseCase
myFoldr f b (x:xs) = f x (myFoldr f b xs)
sumListV2 :: [Int] -> Int
sumListV2 xs = myFoldr (+) 0 xs
sumListV3 :: [Int] -> Int
sumListV3 = myFoldr (+) 0
它減少了eta。注意各種奇妙的用法,例如'plus =(+)' - 它如何知道有兩個參數?減少埃塔(可以googleable的術語)。 'sumListV4 = sum'與您的例子和相同的概念更相似。 –
也許你不會因爲'foo xs = myFoldr(+)0 xs'而購買,那麼我們也知道'foo = myFoldr(+)0'。但是,你是否購買了其他含義?如果'foo = myFoldr(+)0'然後'foo xs = myFoldr(+)0 xs'是否有意義? –