conversja na bezparametrowa funkcje haskell

0

czesc jak bedzie wygladala ta funkcja

liczW  x y = length (filter ((==) x) y ) 

w wersji bezparametrowej czyli bez x i y ?

0

Ja mam tylko pomysł jak się pozbyć ys:

liczW x = length . filter (== x)
2
liczW = (length .) . filter . (==)

Ładne, prawda? ;)

Edit
Jeśli kogoś ciekawią, kroki prowadzące do rozwiązania:

Zaczynamy od przepisania liczW:

liczW e l = length (filter (== e) l)

Pierwszą rzeczą jaką robimy to wyrzucenie prawie wszystkiego do pomocniczej funkcji (nazwanej foo, żeby było nieczytelniej):

liczW e l = length $ foo e l

foo e l = filter (== e) l

Jak widać (albo i nie widać), funkcja foo zwraca listę elementów z listy l które są równe e, a liczW zwraca długość tej listy.
Już na dzień dobry, wyrzucamy argument l z foo:

foo e = filter (== e)

A teraz możemy kulturalnie wyrzucić sobie z tego e:

foo = filter . (==)

No a teraz wystarczy podstawić foo w oryginalnej funkcji, przypominam:

liczW e l = length $ foo e l

Pozbyć się jednego argumentu łatwo, od tego mamy kropkę, ale z dwoma jest gorzej - do tego stworzymy magiczny kombinator:

(.:) = (.).(.)

I teraz łącząc:

liczW = length .: (filter . (==))

No i pozbywając się tego kombinatora żeby było brzydziej, otrzymujemy takiego oto potwora:

liczW :: Eq a => a -> [a] -> Int
liczW = ((.).(.)) length $ (filter . (==))

Edit 2
Zasugerowane przez tajemniczego nieznajomego oraz pewnego bota:

((.) . (.)) length $ filter . (==)

Redukuje się do:

((length .) .) $ filter . (==)

A to z kolei do nowej wersji ostatecznej:

(length .) . filter . (==)

1 użytkowników online, w tym zalogowanych: 0, gości: 1