在点符号中:
absoluteError x y = abs (x-y)
一个不明确的例子在无点符号中:
absoluteError' = curry (abs . uncurry (-))
以下是您自己如何通过小步骤导出它:
absoluteError x y = abs (x-y) = abs ((-) x y) = abs ( ((-) x) y)
= (abs . (-) x) y = ( (abs .) ((-) x) ) y =
= ( (abs .) . (-) ) x y
因此,通过减少ETA,如果f x y = g x y
我们得出的结论f = g
.
此外,暂时使用_B = (.)
,
(abs .) . (-) = _B (abs .) (-) = _B (_B abs) (-) = (_B . _B) abs (-)
= ((.) . (.)) abs (-)
这里有几种方法。
- 老式的:
absoluteError = (abs .) . (-)
- 使用所谓的"胸部操作员"或"猫头鹰操作员"
absoluteError = ((.) . (.)) abs (-)
-
为胸部操作员命名一些更具政治正确性的东西(到底是什么,同时概括它)
(.:) = fmap fmap fmap absoluteError = abs .: (-)
-
使用语义编辑器组合器:
result :: (o1 -> o2) -> (i -> o1) -> (i -> o2) result = (.) absoluteError = (result . result) abs (-)
当然,这些都是相同的技巧,只是名称不同。享受!