16

意味のある記法で:

absoluteError x y = abs (x-y)

ポイントフリー表記の不明確な例:

absoluteError' = curry (abs . uncurry (-))

4

2 に答える 2

33

小さなステップで、自分で導出する方法は次のとおりです。

absoluteError x y = abs (x-y) = abs ((-) x y) = abs ( ((-) x) y) 
                  = (abs . (-) x) y = ( (abs .) ((-) x) ) y = 
                  = ( (abs .) . (-) ) x y

したがって、eta-reductionによって、f x y = g x y結論を下すとf = g.

さらに、_B = (.)ちょっと使って、

(abs .) . (-) = _B (abs .) (-) = _B (_B abs) (-) = (_B . _B) abs (-)
              = ((.) . (.)) abs (-)
于 2012-06-13T06:20:26.687 に答える
26

ここにいくつかの方法があります。

  1. 昔ながら:absoluteError = (abs .) . (-)
  2. いわゆる「おっぱいオペレーター」または「フクロウオペレーター」を使用するabsoluteError = ((.) . (.)) abs (-)
  3. おっぱいオペレーターにもっと政治的に正しい名前を付けてください(そして一体、同時にそれを一般化してください)

    (.:) = fmap fmap fmap
    absoluteError = abs .: (-)
    
  4. セマンティックエディタコンビネータの使用:

    result :: (o1 -> o2) -> (i -> o1) -> (i -> o2)
    result = (.)
    
    absoluteError = (result . result) abs (-)
    

もちろん、これらはすべて同じトリックですが、名前が異なります。楽しみ!

于 2012-06-13T00:49:08.877 に答える