2013-05-18 13 views
8

W Haskell, mamy funkcję flip: flip f x y = f y x, która zasadniczo przyjmuje funkcję i zwraca tę samą funkcję, z wyjątkiem tego, że dwa argumenty są zamieniane. Zastanawiam się, czy istnieje odpowiednik w OCaml, ponieważ nie mogłem go znaleźć i nie chcę go przepisywać za każdym razem.Czy istnieje funkcja `flip` w standardowej bibliotece OCaml?

Cheers,

+0

[Odpowiednik OCaml dla Hoogle niczego nie znajduje] (http://search.ocaml.jp/?q=%28%27a+-%3E+%27b+-%3E+%27c%29+-% 3E +% 27b + -% 3E +% 27a + -% 3E +% 27c), przynajmniej. – hammar

Odpowiedz

12

wiele funkcji, takich jak ten na uogólnionego FP kanalizacji nie są zdefiniowane w bibliotece standardowej OCaml. Zawsze za nimi tęskniłem.

Jednak obecnie istnieją dobre biblioteki OCaml, które dostarczają większość lub wszystkie te brakujące funkcje. Projekt OCaml Batteries Included definiuje flip w module BatPervasives. Projekt Jane Street Core definiuje flip w module Fn.

+2

W rdzeniu funkcja jest 'Fn.flip' – rgrinberg

+0

Wielkie dzięki. Na szczęście, że został zdefiniowany w Core. – tfboy

2

Ból jest nieco złagodzony przez oznakowanych argumenty

# let f ~x ~y = x - y;; 
val f : x:int -> y:int -> int = <fun> 
# f ~y:5;; 
- : x:int -> int = <fun> 
# f ~x:6;; 
- : y:int -> int = <fun> 

Tak więc jeśli jesteś gotów do zapisania etykiety (co niektórzy twierdzą czyni kod bardziej czytelny) to może być w stanie uzyskać zachowanie ty chcieć. To zależy oczywiście od sytuacji.

+1

'flip' jest w rzeczywistości bardziej przydatny w kontekście częściowej aplikacji. Prostym przykładem może być funkcja odejmowania liczby o 2: 'flip (-) 2' – YuriAlbuquerque

Powiązane problemy