2017-09-22 3 views
1

の演算子の優先順位を変更します。の優先順位を最初に適用するように変更したいと考えています。したがって、以下の機能構成では括弧は必要ありません。これは可能ですか?

julia> ∘(f,g) = x->f(g(x))    
∘ (generic function with 1 method)  

julia> (sqrt ∘ abs)(randn())    
0.9069709279812338 

julia> sqrt ∘ abs(randn())    
(::#15) (generic function with 1 method)           
+1

この '∘(F、G)= X-> F(G(X)))'ベースにすでに定義されています。 –

+1

ジュリアのソースコード( 'src/julia-parser.scm'ファイルだと思います)で優先順位を変更することは技術的に可能ですが、もちろんこれは推奨されていません。だから、私は短い(そして推奨される)答えはノーだと言うでしょう。 –

答えて

1

ジュリアはメタプログラミング時に強く、あなた自身のマイクロ言語を作成できなければなりません。

私はJuliaの初心者ですので、以下のコードはちょっとした実験です!

しかし、多分、それは心に強く訴えることができた(複数行を解析して問題のでそしてそれはinclompleteです):

module M 
    macro x(a) 
    w = r"(\w+)\s*∘\s*(\w+)" # trying to find words around ∘ 
    s = s"(\1 ∘ \2)"   # and enclosed them into brackets 
    b = replace("$a", w, s) 
    return :(eval(parse($b))) 
    end 
end 

import M 

[email protected](
    sqrt ∘ abs(randn()) 
) 
+0

解析するのではなく、https://stackoverflow.com/a/46366560/1782955のparseallと 'M. @ x( sqrt abs(randn())のisteadを使用する方が良いです。 。@ x begin sqrt abs(randn()) end'。これにより、複数行の複数表現ブロックを「翻訳」することができます。 – Liso

関連する問題