Ich denke, F # 's Pipe Forward Operator ( |>
) sollte vs ( & ) in haskell sein.
// pipe operator example in haskell
factorial :: (Eq a, Num a) => a -> a
factorial x =
case x of
1 -> 1
_ -> x * factorial (x-1)
// terminal
ghic >> 5 & factorial & show
Wenn Sie den &
Operator ( ) nicht mögen , können Sie ihn wie F # oder Elixir anpassen:
(|>) :: a -> (a -> b) -> b
(|>) x f = f x
infixl 1 |>
ghci>> 5 |> factorial |> show
Warum infixl 1 |>
? Siehe das Dokument in Datenfunktion (&)
infixl = infix + linke Assoziativität
infixr = infix + rechte Assoziativität
(.)
( .
) bedeutet Funktionszusammensetzung. Es bedeutet (fg) (x) = f (g (x)) in Mathe.
foo = negate . (*3)
// ouput -3
ghci>> foo 1
// ouput -15
ghci>> foo 5
es ist gleich
// (1)
foo x = negate (x * 3)
oder
// (2)
foo x = negate $ x * 3
( $
) Operator ist auch in Data-Function ($) defind .
( .
) wird zum Erstellen Hight Order Function
oder verwendet closure in js
. Siehe Beispiel:
// (1) use lamda expression to create a Hight Order Function
ghci> map (\x -> negate (abs x)) [5,-3,-6,7,-3,2,-19,24]
[-5,-3,-6,-7,-3,-2,-19,-24]
// (2) use . operator to create a Hight Order Function
ghci> map (negate . abs) [5,-3,-6,7,-3,2,-19,24]
[-5,-3,-6,-7,-3,-2,-19,-24]
Wow, weniger (Code) ist besser.
Vergleiche |>
und.
ghci> 5 |> factorial |> show
// equals
ghci> (show . factorial) 5
// equals
ghci> show . factorial $ 5
Es ist der Unterschied zwischen left —> right
und right —> left
. ⊙﹏⊙ |||
Humanisierung
|>
und &
ist besser als.
weil
ghci> sum (replicate 5 (max 6.7 8.9))
// equals
ghci> 8.9 & max 6.7 & replicate 5 & sum
// equals
ghci> 8.9 |> max 6.7 |> replicate 5 |> sum
// equals
ghci> (sum . replicate 5 . max 6.7) 8.9
// equals
ghci> sum . replicate 5 . max 6.7 $ 8.9
Wie funktioniert man in objektorientierter Sprache?
Bitte besuchen Sie http://reactivex.io/
IT-Unterstützung :
- Java: RxJava
- JavaScript: RxJS
- C #: Rx.NET
- C # (Einheit): UniRx
- Scala: RxScala
- Clojure: RxClojure
- C ++: RxCpp
- Lua: RxLua
- Ruby: Rx.rb.
- Python: RxPY
- Los: RxGo
- Groovy: RxGroovy
- JRuby: RxJRuby
- Kotlin: RxKotlin
- Swift: RxSwift
- PHP: RxPHP
- Elixier: reaxiv
- Dart: RxDart
&
Haskells ist|>
. Tief in diesem Thread vergraben und ich brauchte ein paar Tage, um es zu entdecken. Ich benutze es oft, weil Sie natürlich von links nach rechts lesen, um Ihrem Code zu folgen.