2017-09-22 126 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)))'已在Base中定義。 –

+1

在技術上可以改變Julia源代碼的優先級(我認爲是'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

而不是解析它是更好的使用parseall從https://stackoverflow.com/a/46366560/1782955,而不是'M. @ x( sqrt∘abs(randn()) )'更好地使用'M 。@ x begin sqrt∘abs(randn()) end'。它允許「翻譯」多行,多表達式塊。 – Liso