2014-01-15 22 views

回答

5

.是函數組合,你這麼說是什麼,採取功能foldr (+) 0 :: [Int] -> Intmap (^2) a :: [Int]組成,但是,這個是沒有意義的,你的第二個「功能」,在此成分是不是真的一個函數。

你最好別要的是來交換他們和使用的應用程序,而不是組成

foldr (+) 0 (map (^2) a) 
foldr (+) 0 $ map (^2) a 

,這可以被轉換回什麼叫做「埃塔轉換」

sumSquares = foldr (+) 0 . map (^2) 
sumSquares = sum . map (^2) 

由於成分另外,foldr可能是這裏的錯誤摺疊,foldl'會更節省空間。

+0

'sum'在其累加器中也是非結構體。 –

+0

@TomEllis是的,這就是爲什麼你可以用它吹堆棧,'foldl''在恆定空間中運行 – jozefg

3

你要真正做到這一點:

sumSquares a = foldr (+) 0 $ map (^2) a 

演示了ghci:

ghci> sumSquares [2,2] 
8 

要使用(.)運營商解決這個問題,你可以使用該解決方案由@Sassa提到:

sumSquares = foldr (+) 0 . map (^2) 

但我覺得很難看,或者你可以看到jozefg解決方案,其中h Ë使用sum(.)

+0

這有效!非常感謝 – user3105607

+0

我被告知要使用。運算符,爲什麼這不起作用,或者如何改變我的代碼以使用點?謝謝 – user3105607

+0

@ user3105607請參閱jozefg答案。 :) – Sibi