2013-10-04 30 views
8

Powiedzmy mamy ten punkt wolna funkcję:f1 = odwróć mapę const. Jak działa ta funkcja?

f1 = flip const map 

jestem bladego pojęcia o tym, jak dokładnie to działa i co ma robić? tj. Wiem, jakie są funkcje map, const i flip. Ale składanie ich w taki sposób po prostu nie ma dla mnie sensu. Co dokładnie dzieje się w tej funkcji? Wydaje się, że powracam do tego samego co zawsze, ale ... Dlaczego?

Odpowiedz

5

Należy pamiętać, że wszystkie funkcje w Haskell przyjmują tylko jeden argument, ale symulują przyjmowanie wielu argumentów przez zwrócenie innej funkcji. Więc flip const map można również zapisać jako (flip const) map. const zwykle ignoruje swój drugi argument i zwraca jego pierwszy argument. flip odwraca kolejność argumentów, więc flip const ignoruje pierwszy argument i zwraca drugi argument. Tak więc map zostanie zignorowany i zwrócona zostanie funkcja, która zawsze zwraca jego argument.

4

To naprawdę nie ma znaczenia, jeśli umieścisz tam coś innego niż map. Wyrażenie flip const odwraca argumenty const, więc zamiast zawsze zwracać pierwszy argument, zwraca on drugi. Możesz przetestować to poprzez przedefiniowanie f1 = flip const undefined. Spowoduje to wyjątek, jeśli oceniany jest zawsze undefined, ale widać, że daje to samo zachowanie. Zasadniczo, flip const undefined = id.

14

Zobaczmy, co robi ta funkcja, po trochu

flip const map x = (flip const) map x 
       = const x map 
       = x 

Dlatego zawsze zwraca czego dać!