「The Craft of Function Programming」という本では、記号 '>.>' は関数を結合し、'.' の方向とは逆になっています。しかし、ghci を使用して実装すると、エラー '>.>' が範囲外に表示されます。なんで?もう使われていない古い表記ですか?
3 に答える
7
>.>デフォルトでは定義されていませんが、自分で定義できます。
infixl 9 >.>
(>.>) = flip (.)
または同等に、
infixl 9 >.>
f >.> g = g . f
( Preludeinfixr 9 .のに基づいて固定宣言を行いました。)
于 2011-12-28T11:14:58.350 に答える
6
それはおそらく本で定義された単なる関数です(私は本を読んでいませんでした)。私の知る限り、>.>どこでも使用されていません。自分で定義できます:
(>.>) = flip (.)
これの事実上の表記は のよう(#)です。
関数は矢印 「Control.Category」も使用できます>>>。
Prelude Control.Category> ((*2) . (+1)) 4
10
Prelude Control.Category> ((*2) <<< (+1)) 4
10
Prelude Control.Category> ((*2) >>> (+1)) 4
9
Prelude Control.Category> ((+1) >>> (*2)) 4
10
于 2011-12-28T11:16:12.687 に答える
3
(>.>)標準ライブラリでは定義されていないようです。ただし、同じように動作する(>>>)inがあります。Control.Category
Prelude> :m + Control.Category
Prelude Control.Category> :i (>>>)
(>>>) :: Category cat => cat a b -> cat b c -> cat a c
-- Defined in Control.Category
infixr 1 >>>
Prelude Control.Category> let f = (* 2) >>> (+ 3)
Prelude Control.Category> f 5
13
Hoogleを使用して、これらのことを把握できることに注意してください。
さらに、もちろん、いつでもそのような演算子を自分で定義できます。
(>.>) :: (a -> b) -> (b -> c) -> (a -> c)
f >.> g = g . f
次に、次のように記述できます。
Main*> ((* 2) >.> (+ 3)) 5
13
于 2011-12-28T11:19:07.927 に答える