Есть ли лучший способ выразить функцию абсолютной ошибки в точечной нотации? В точном обозначении: absoluteError x y = abs (x-y) Непонятный пример в беззадачной нотации: absoluteError' = curry (abs . uncurry (-)) Ответ 1 Вот как вы могли бы вывести его сами, небольшими шагами: 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 (-) Ответ 2 Вот несколько способов. старомодный: absoluteError = (abs .) . (-) используйте так называемый "оператор сиськов" или "оператор совы" absoluteError = ((.) . (.)) abs (-) назовите оператора сиськи чем-то более политически правильным (и то, что черт, обобщите его в одно и то же время) (.:) = fmap fmap fmap absoluteError = abs .: (-) используя комбинаторы семантического редактора: result :: (o1 -> o2) -> (i -> o1) -> (i -> o2) result = (.) absoluteError = (result . result) abs (-) Конечно, это все тот же трюк, только с разными именами. Наслаждайтесь!
Ответ 1 Вот как вы могли бы вывести его сами, небольшими шагами: 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 (-)
Ответ 2 Вот несколько способов. старомодный: absoluteError = (abs .) . (-) используйте так называемый "оператор сиськов" или "оператор совы" absoluteError = ((.) . (.)) abs (-) назовите оператора сиськи чем-то более политически правильным (и то, что черт, обобщите его в одно и то же время) (.:) = fmap fmap fmap absoluteError = abs .: (-) используя комбинаторы семантического редактора: result :: (o1 -> o2) -> (i -> o1) -> (i -> o2) result = (.) absoluteError = (result . result) abs (-) Конечно, это все тот же трюк, только с разными именами. Наслаждайтесь!