Örneğin, here açıklandığı gibi, F # içindeki fonksiyon kompozisyonunun temellerini anlarım.Neyi eksik: Birden fazla argümanı olan fonksiyon kompozisyonu mümkün mü?
Belki de bir şeyleri özlüyorum. >>
ve <<
operatörleri her fonksiyon sadece bir argüman alır varsayımıyla tanımlanmıştır görünmektedir:
let add a b = a + b
let double c = 2*c
let addAndDouble = add >> double // bad!
:
> (>>);;
val it : (('a -> 'b) -> ('b -> 'c) -> 'a -> 'c) = <fun:[email protected]>
> (<<);;
val it : (('a -> 'b) -> ('c -> 'a) -> 'c -> 'b) = <fun:[email protected]>
ben yapmak istiyorum Ne Ancak, aşağıdaki gibi bir şey
Ancak add
'un çıkışı, double
'un girişi için gerekli olsa da, bu reddedilir.
let add (a,b) = a + b
Ya ben ilk işleve olası argümanlar her sayısı için yeni bir operatöre yazabilirsiniz:
let inline (>>+) f g x y = g (f x y)
let doubleAdd = add >>+ double
Ama bunu
ben bir tanımlama grubu argümanı ile ekleyebilir yeniden yazabilirsiniz biliyoruz aptalca görünüyor! Kaçırdığım daha iyi bir yolu var mı?
Anlaştık, sivri tarzı genellikle daha okunabilir. – Laurent
Özellikle, fonksiyonlarınızı 'çevirmeye' başladığınızda. –