W notacji pointful:Czy istnieje lepszy sposób na wyrażenie bezwzględnej funkcji błędu w notacji bez punktu?
absoluteError x y = abs (x-y)
Niejasna przykład w notacji pointfree:
absoluteError' = curry (abs . uncurry (-))
W notacji pointful:Czy istnieje lepszy sposób na wyrażenie bezwzględnej funkcji błędu w notacji bez punktu?
absoluteError x y = abs (x-y)
Niejasna przykład w notacji pointfree:
absoluteError' = curry (abs . uncurry (-))
Oto jak można to wywodzą się w małych krokach:
absoluteError x y = abs (x-y) = abs ((-) x y) = abs (((-) x) y)
= (abs . (-) x) y = ((abs .) ((-) x)) y =
= ((abs .) . (-)) x y
tak, by eta-reduction, jeśli f x y = g x y
wnioskujemy f = g
.
Ponadto, korzystając _B = (.)
Przez chwilę
(abs .) . (-) = _B (abs .) (-) = _B (_B abs) (-) = (_B . _B) abs (-)
= ((.) . (.)) abs (-)
Oto kilka sposobów.
absoluteError = (abs .) . (-)
absoluteError = ((.) . (.)) abs (-)
nazwą coś bardziej politycznie poprawny operator cycki (i co do cholery, uogólniać to w tym samym czasie)
(.:) = fmap fmap fmap
absoluteError = abs .: (-)
użyciu semantic editor combinators:
result :: (o1 -> o2) -> (i -> o1) -> (i -> o2)
result = (.)
absoluteError = (result . result) abs (-)
Oczywiście są to te same sztuczki, tylko z różnymi nazwami. Cieszyć się!
Dlaczego tak czy inaczej nigdzie nie jest zdefiniowane '.:'? Albo to jest? – leftaroundabout
@leftroundabout Jest to zdefiniowane w kilku pakietach hackage, ale jest to tak mała definicja, że większość ludzi nie uważa, że dodatkowa zależność jest warta wysiłku, jak sądzę. –
+1 dla 'fmap fmap fmap'. –
'(abs.). (-) ' – Vitus
Jeśli jest jasne w spiczastym zapisie, to co jest z nim nie tak? To wygląda na taki przykład, w którym dowolna wersja bez punktu będzie musiała być odczytana przez konwersję mentalną tak czy inaczej ... – Ben