我想更改∘
的优先级,以便首先应用它。因此,下面的功能组合中不需要括号。这可能吗?
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)
答案 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())
)