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-reductionf x y = g x yf = 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 回答