從書中Learn You a Haskell For Great Good偏函數的相關章節包含以下代碼:什麼是這些Haskell高階函數的Python等價物?
multThree :: (Num a) => a -> a -> a -> a
multThree x y z = x * y * z
ghci> let multTwoWithNine = multThree 9
ghci> multTwoWithNine 2 3
54
ghci> let multWithEighteen = multTwoWithNine 2
ghci> multWithEighteen 10
180
我目前在Python中functools庫中播放,並設法複製使用它的職能的行爲。
from functools import partial
def multThree(x,y,z):
return x * y * z
>>> multTwoWithNine = partial(multThree,9)
>>> multTwoWithNine(2,3)
>>> multWithEighteen = partial(multTwoWithNine,2)
>>> multWithEighteen(10)
180
有一件事我現在想要做的就是看能不能從同一本書章節複製一些比較有意思的高階功能,如:
zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith' _ [] _ = []
zipWith' _ _ [] = []
zipWith' f (x:xs) (y:ys) = f x y : zipWith' f xs ys
不過,我米不知道如何做到這一點,或者如果partial()
甚至在這裏有用。
您應該編輯和修復你的職責,確保他們都是語法正確。例如,你的第一個問題就是缺少它的論點。 – 2013-02-10 04:34:51
從技術上講,你必須在任何轉換中使用'partial',因爲所有的Haskell函數都會自動執行curried,而'partial'模擬curried函數必須部分應用的能力。或者您可以將python版本編寫爲curried函數,但是您必須將它們稱爲「foo(a)(b)(c)'。 – Wes 2013-02-10 04:57:33
小調:你想要「部分應用功能」而不是「部分功能」。 – 2013-02-10 09:35:21