评估函数中的向量或元组 (julia)

Tio*_*ias 5 julia

我想在函数 $f$ 中计算一组向量(或元组),但 Julia 告诉我这是不可能的。

例如:如果我有一个元组数组p=[(1,1), (1,-1), (-1,1), (-1,-1)]和一个函数f(x,y)=x+y。我想计算一下f(p[1]) = f(1,1)= 2。但是 Julia 告诉我这些类型是不兼容的。

你能帮我吗?

Bog*_*ski 5

你必须像这样生成一个元组:

julia> p=[(1,1), (1,-1), (-1,1), (-1,-1)]
4-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (1, -1)
 (-1, 1)
 (-1, -1)

julia> f(x,y)=x+y
f (generic function with 1 method)

julia> f(p[1]...)
2
Run Code Online (Sandbox Code Playgroud)

您还可以定义一个高阶函数splat,它可以方便地包装任何函数并执行 splatting。这很有用,因为您可以例如广播这样的功能:

julia> splat(f) = x -> f(x...)
splat (generic function with 1 method)

julia> splat(f)(p[1])
2

julia> splat(f).(p)
4-element Array{Int64,1}:
  2
  0
  0
 -2
Run Code Online (Sandbox Code Playgroud)

或者,您可以f像这样定义函数:

julia> f((x,y),)=x+y
f (generic function with 1 method)

julia> f(p[1])
2
Run Code Online (Sandbox Code Playgroud)

现在你不必做泼溅了。