Julia 中是否有用于函数组合的运算符?
Is there an operator for function composition in Julia?
假设我有两个函数:
f(x) = x^2
g(x) = x + 2
他们的组合就是函数
h(x) = f(g(x))
Julia 中有函数组合运算符吗?例如,如果 *
是函数组合的运算符(实际上不是),我们可以这样写:
h = f * g
P.S.我知道我可以定义它,如果我想,
*(f::Function, g::Function) = x -> f(g(x))
只是问一下 Julia 中是否已经有运算符表单。
目前 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 函数,我想不出没有 lambda 来执行这种操作的方法。
注意:按照@DanGetz 的建议,∘ 运算符可以写成 \circ。
编辑:似乎 fast closures 将在未来的版本中出现,并且可能 容易 实现复合运算符的高效版本。
假设我有两个函数:
f(x) = x^2
g(x) = x + 2
他们的组合就是函数
h(x) = f(g(x))
Julia 中有函数组合运算符吗?例如,如果 *
是函数组合的运算符(实际上不是),我们可以这样写:
h = f * g
P.S.我知道我可以定义它,如果我想,
*(f::Function, g::Function) = x -> f(g(x))
只是问一下 Julia 中是否已经有运算符表单。
目前 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 函数,我想不出没有 lambda 来执行这种操作的方法。
注意:按照@DanGetz 的建议,∘ 运算符可以写成 \circ。
编辑:似乎 fast closures 将在未来的版本中出现,并且可能 容易 实现复合运算符的高效版本。