vitutor tipos resueltos relativo medidas indirectas fisica experimental errores error ejercicios absoluto haskell pointfree

haskell - tipos - medidas indirectas



¿Hay una mejor manera de expresar la función de error absoluto en notación sin puntos? (2)

En notación puntual:

absoluteError xy = abs (xy)

Un ejemplo poco claro en notación de punto libre:

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


Aquí hay un puñado de maneras.

  1. la antigua: absoluteError = (abs .) . (-) absoluteError = (abs .) . (-)
  2. use el llamado "operador de tetas", o "operador de búho" absoluteError = ((.) . (.)) abs (-)
  3. nombrar al operador de las tetas algo más políticamente correcto (y qué diablos, generalizarlo al mismo tiempo)

    (.:) = fmap fmap fmap absoluteError = abs .: (-)

  4. utilizando combinadores de editor semántico :

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

Por supuesto, estos son todos el mismo truco, solo que con nombres diferentes. ¡Disfrutar!


Así es como podría derivarlo usted mismo, en pequeños pasos:

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

entonces, por eta-reduction , si fxy = gxy concluimos f = g .

Además, usando _B = (.) Por un momento,

(abs .) . (-) = _B (abs .) (-) = _B (_B abs) (-) = (_B . _B) abs (-) = ((.) . (.)) abs (-)