函数和值的组成

时间:2017-09-23 08:16:15

标签: julia

我希望在将函数组合应用于值时避免使用括号。我提出了构建函数和值的想法:

julia> ∘(f::Function, x::Number)=f(x)
∘ (generic function with 2 methods)

julia> sqrt ∘ abs ∘ -2
1.4142135623730951

julia> sqrt ∘ abs ∘ (1-3)
1.4142135623730951

我的问题是如何声明x参数接受"值"这不是一个函数,因此它不会覆盖∘(f::Function, g::Function)

2 个答案:

答案 0 :(得分:4)

撰写函数和值是什么意思?它可能意味着用恒定值进行缩放?例如sqrt ∘ abs ∘ x->-2x(这会给你一个功能,而不是结果)。但是你想要做的只是将函数应用于一个值,在这种情况下,如果你真的讨厌括号,你可以编写-2 |> sqrt ∘ abs。我同意你的意见,覆盖不是一个好主意,因为它打破了功能组合的概念。

答案 1 :(得分:2)

我不知道这是不是一个好主意,但你可以使用它:

∘(f, g) = f(g)                                              # define for all
∘{S<:Function,T<:Function}(f::S, g::T) = (x...)->f(g(x...)) # but not for fnc

修改:我想您不想重新定义功能的任何子类型的功能

edit2 :需要更大的重新定义

你不要避免括号:

sqrt ∘ abs ∘ (x->2x) ∘ 1