2017-09-23 14 views
3

関数の構成を値に適用する際に角カッコを避けることをお勧めします。私は、関数と値を構成するためのアイデアを思い付く:関数と値の合成

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 

私の質問は、それが∘(f::Function, g::Function)を上書きしないように、関数ではありません「値」を受け入れるように引数xを宣言する方法です

答えて

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 
4

の機能と値の意味は何ですか?一定の値でスケールすることを意味するのでしょうか?例えばsqrt ∘ abs ∘ x->-2x(これは関数であり結果ではありません)。しかし、それはあなたが本当に本当に大括弧を嫌う場合、この場合は、-2 |> sqrt ∘ absを書くことができる値に関数を適用するだけで何をしたいと思われるようです。私はを上書きすることは良い考えではないことに同意します。なぜなら、それは機能構成の概念を破るからです。

+1

感謝のお返事ありがとうございます! :) – Liso

+1

ありがとう。私は '-2 |> sqrtを参照してください。abs plus'は良いオプションです。ハックはありません。 – Phuoc

+1

@Phuoc '-2 |> abs |> sqrt'でも構いません。 – Liso

関連する問題