朱莉娅有功能构成的操作员吗?

时间:2016-03-30 15:58:41

标签: julia function-composition

说我有两个功能:

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

他们的作品是功能

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

朱莉娅有功能构成的操作员吗?例如,如果*是函数组合的运算符(它不是),我们可以写:

h = f * g

P.S。我知道如果我愿意,我可以定义它,

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

只是询问Julia中是否有运营商表格。

1 个答案:

答案 0 :(得分:11)

目前创建此类运算符是open issue,但现在您可以遵循以下语法:

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

或更清晰一点(对于更复杂的功能):

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

现在看来你需要保留x才能使它成为复合函数。

另一个选择是创建自己的运算符(如你所知):

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

这很好用,但是,它引入了一个lambda函数,我想不出没有lambdas就能执行这种操作的方法。

注意:∘运算符可以写成@ circ,如@DanGetz所示。

编辑:似乎fast closures将来会发布,并且很可能 easy 来实现复合运算符的高效版本。