В точечной нотации:
absoluteError x y = abs (x-y)
Непонятный пример в бесточечной записи:
absoluteError' = curry (abs . uncurry (-))
В точечной нотации:
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
Итак, с помощью эта-редукции, если 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 (-)
Конечно, это все один и тот же трюк, только с разными названиями. Наслаждаться!
.:
нигде не определен стандарт? Либо это?
- person leftaroundabout; 13.06.2012