7

通常我發現我想編寫兩個函數f和g,但g需要多個參數。哈斯克爾是否提供了一組運營商所提供的(我知道我可以寫我自己,但似乎相當普遍的,我不想重複已經存在於哈斯克爾運營商)Haskell符號用於組成兩個函數f和g,其中g需要多個參數

即像

([email protected]) = (.) 
([email protected]@) f g x1 x2 = f $ g x1 x2 
([email protected]@@) f g x1 x2 x3 = f $ g x1 x2 x3 
([email protected]@@@) f g x1 x2 x3 x4 = f $ g x1 x2 x3 x4 
... 

高達參數

+3

您可能對[composition](http://hackage.haskell.org/package/composition-1.0.1.0/docs/Data-Composition.html)庫 – bheklilr

+0

感興趣請問您能舉一個具體的例子嗎? – Shoe

+1

@bheklilr謝謝,這就是我正在尋找的答案。它是(。:)(。::)等我試着用谷歌搜索「haskell撰寫函數多個參數」,但谷歌沒有給出任何有用的鏈接 – dspyz

回答

6

我知道你得到了你想要的答案,但我想指出的是,這些組合子有以下可愛的實現:

(.:) = (.) . (.) 
(.:.) = (.) . (.) . (.) 
(.::) = (.) . (.) . (.) . (.) 
(.::.) = (.) . (.) . (.) . (.) . (.) 

,如果你只需要他們充分應用:

f .: g = (f .) . g 
f .:. g = ((f .) .) . g 
f .:: g = (((f .) .) .) . g 
f .::. g = ((((f .) .) .) .) . g 

直接使用這些表達式並沒有定義運算符,這似乎並不可怕。至少第一個,(f .) . g,對我來說似乎足夠可讀。

+1

哇!我喜歡這個,但我完全迷失了。你介意在嬰兒步驟中解釋這一點嗎?我無法弄清楚如何解開它。 – dspyz

+0

好吧,我把所有的東西都移動到前綴記法和評估(。)(。)(。)f g x y,然後用f(g x)不加思索地替換(。)f g x表達式直到我到達f(g x y) – dspyz

相關問題