2016-03-30 15 views
7

Powiedz, mam dwie funkcje:Czy istnieje operator składu funkcji w Julia?

f(x) = x^2 
g(x) = x + 2 

Ich skład jest funkcja

h(x) = f(g(x)) 

Czy istnieje operator za złożenie funkcji w Julia? Na przykład, jeśli operator * był dla kompozycji funkcji (nie), można napisać:

h = f * g 

P.S. wiem, mogę to określić, czy chcę,

*(f::Function, g::Function) = x -> f(g(x)) 

Tylko pytam, czy istnieje forma operator już w Julii.

+0

Być może użycie operatora '∘' (wpisz używając' \ circ' TAB w REPL) spowoduje lepszy wygląd matematyczny. –

+0

@DanGetz Zgadzam się, ale jest to również domyślnie niezdefiniowane. – becko

+3

Trasa do uzyskania wartości domyślnej najprawdopodobniej będzie: Definiuj w kodzie -> W pakiecie -> W popularnym pakiecie -> W bazie. –

Odpowiedz

11

To jest obecnie open issue stworzenie takiego operatora, ale teraz można zachować do składni:

julia> h(x) = f(g(x)) 

lub trochę bardziej wyraźniejszy (dla bardziej złożonych funkcji):

julia> h(x) = x |> g |> f 

Wydaje się, że na razie musisz zachować x, aby uczynić go funkcją złożoną.

Inną opcją jest stworzenie własnego operatora (jak sugerujesz):

julia> ∘(f::Function, g::Function) = x->f(g(x)) 
julia> h = f ∘ g 

to działa perfekcyjnie, jednak wprowadza funkcję lambda, i nie mogę myśleć o sposób wykonywania takiej operacji bez lambdas.

UWAGA: Operator can może być zapisany jako \ circ as @DanGetz recommended.


EDIT: Wydaje fast closures idą w przyszłych wydaniach i będzie prawdopodobnie łatwy wdrożyć wydajną wersję operatora kompozytowego.

+1

Szybkie zamknięcia są teraz w Julii 0.5. Wszelkie aktualizacje dotyczące operatora kompozycji? – becko

+1

To jest teraz w Julia 0.6 (jako ∘) –

Powiązane problemy