Haskell的美元符号是一个很棒的函数,f $ g
例如,f
用其结果g
作为参数进行评估.这可以像这样出色地工作
sin $ sqrt $ abs $ f 2
这相当于
sin(sqrt(abs(f(2))))
美元符号对我很好,因为它更具可读性.我注意到Julia有|>
哪些管道.这似乎f |> g
意味着g
将评估结果f
作为参数.从我注意到的,似乎我可以像这样编写上述表达式
2 |> f |> abs |> sqrt |> sin
但我想知道是否有一些运算符,我可以做我在Haskell中所做的事情.
可以$
在模块中本地定义运算符(只要您不需要xor的弃用含义);
f $ y = f(y)
但是,此运算符的关联性(它是左关联的)是不正确的,并且其优先级太高而不能用于避免括号.幸运的是,有很多权利优先的权利关联运算符.人们可以定义
f ? x = f(x)
(单行定义,几乎是Haskell-esque!)然后使用它:
julia> sin ? ? 1.2246467991473532e-16 julia> exp ? sin ? ? 1.0000000000000002 julia> exp ? sin ? ? 1.0000000000000002
现在在不稳定的夜间版本上有一个函数组合运算符(很快将在0.6).它可以在Compat.jl包的早期版本中使用.
help?> ? "?" can be typed by \circf ? g Compose functions: i.e. (f ? g)(args...) means f(g(args...)). The ? symbol can be entered in the Julia REPL (and most editors, appropriately configured) by typing \circ . Example: julia> map(uppercase?hex, 250:255) 6-element Array{String,1}: "FA" "FB" "FC" "FD" "FE" "FF"
或者,以您的示例 - 请注意您需要括号:
julia> (sin ? sqrt ? abs ? f)(2) 0.9877659459927356