朱莉娅有一个类似于哈斯克尔的美元符号的算子吗?

时间:2017-01-19 04:02:35

标签: haskell julia

Haskell的美元符号是一个很棒的函数,对于f $ g,例如,fg的结果作为参数进行评估。这可以像这样出色地工作

sin $ sqrt $ abs $ f 2

相当于

sin(sqrt(abs(f(2))))

美元符号对我很好,因为它更具可读性。我注意到Julia有|>个管道。这似乎是f |> g,意味着gf的评估结果作为参数。从我注意到的情况来看,似乎我可以像这样编写上述表达式

2 |> f |> abs |> sqrt |> sin

但是我想知道是否有一些操作符,这样我可以像Haskell那样做。

2 个答案:

答案 0 :(得分:16)

可以在模块中本地定义$运算符(只要您不需要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

答案 1 :(得分:14)

现在在不稳定的夜间版本上有function composition operator(很快就会在0.6)。它可以在Compat.jl包的早期版本中使用。

help?> ∘
"∘" can be typed by \circ<tab>

  f ∘ 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<tab>. 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