更改∘的运算符优先级

时间:2017-09-22 00:13:51

标签: julia

我想更改的优先级,以便首先应用它。因此,下面的功能组合中不需要括号。这可能吗?

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 个答案:

答案 0 :(得分:1)

朱莉娅在元编程方面非常强大,所以你必须能够制作自己的微语言。

我只是朱莉娅的初学者,所以下面的代码只是我的小实验! (并且它是完整的,因为解析多行的问题)

但也许它可能是鼓舞人心的:

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

M.@x(
  sqrt ∘ abs(randn())
)