我明白在F#功能組合物的基礎,如,例如,描述here。我錯過了什麼:函數組合可能有多個參數?
也許我失去了一些東西,但。該>>
和<<
運營商似乎已經與假設定義的每個函數只需要一個參數:
> (>>);;
val it : (('a -> 'b) -> ('b -> 'c) -> 'a -> 'c) = <fun:[email protected]>
> (<<);;
val it : (('a -> 'b) -> ('c -> 'a) -> 'c -> 'b) = <fun:[email protected]>
我今天準備這樣做,但是,類似如下:
let add a b = a + b
let double c = 2*c
let addAndDouble = add >> double // bad!
但是,即使add
的輸出是double
的輸入所需的類型,但它被拒絕。
我知道我可以重寫添加一個元組的參數:
let add (a,b) = a + b
或者,我可以寫的可能的參數每隔數到第一功能的新的運營商:
let inline (>>+) f g x y = g (f x y)
let doubleAdd = add >>+ double
但看起來很傻!有沒有更好的方式,我錯過了?
同意的,尖銳的風格往往是更具可讀性。 – Laurent 2011-03-27 01:32:38
特別是當你開始不得不「翻轉」你的功能。 – 2011-03-27 07:00:37