В Джулии сделайте Набор вектора и укажите тип Набора - PullRequest
2 голосов
/ 02 мая 2020

В Юлии это работает, как и ожидалось:

g1 = [1, 1, 0, 0] / sqrt(2)
u1 = [1, -1, 0, 0] / sqrt(2)
g2 = [0, 0, 1, 1] / sqrt(2)
u2 = [0, 0, 1, -1] / sqrt(2)

up = Set()
push!(up, g1, u1, g2, u2)

дает результат:

Set{Any} with 4 elements:
  [0.0, 0.0, 0.7071067811865475, -0.7071067811865475]
  [0.7071067811865475, 0.7071067811865475, 0.0, 0.0]
  [0.0, 0.0, 0.7071067811865475, 0.7071067811865475]
  [0.7071067811865475, -0.7071067811865475, 0.0, 0.0]

Однако набор считается Set{Any}, и я бы предпочел Set{Array{Float64, 1}} для того, чтобы получить ошибку, я должен по ошибке сделать sh что-то другое.

Когда я пытаюсь:

up = Set{Array{Float64, 1}}
push!(up, g1, u1, g2, u2)

, я получаю следующую ошибку:

ERROR: MethodError: no method matching push!(::Type{Set{Array{Float64,1}}}, ::Array{Float64,1})
Closest candidates are:
  push!(::Any, ::Any, ::Any) at abstractarray.jl:2158
  push!(::Any, ::Any, ::Any, ::Any...) at abstractarray.jl:2159
  push!(::Array{Any,1}, ::Any) at array.jl:919
  ...
Stacktrace:
 [1] push!(::Type{T} where T, ::Array{Float64,1}, ::Array{Float64,1}) at .\abstractarray.jl:2158
 [2] push!(::Type{T} where T, ::Array{Float64,1}, ::Array{Float64,1}, ::Array{Float64,1}, ::Vararg{Array{Float64,1},N} where N) at .\abstractarray.jl:2159
 [3] top-level scope at none:0

Какой будет правильный синтаксис?

1 Ответ

3 голосов
/ 02 мая 2020

Вы забыли конструктор, он должен быть up = Set{Array{Float64, 1}}(), см. Код ниже:

julia> up = Set{Array{Float64, 1}}()
Set{Array{Float64,1}} with 0 elements

julia> push!(up, g1, u1, g2, u2)
Set{Array{Float64,1}} with 4 elements:
  [0.0, 0.0, 0.7071067811865475, -0.7071067811865475]
  [0.7071067811865475, 0.7071067811865475, 0.0, 0.0]
  [0.0, 0.0, 0.7071067811865475, 0.7071067811865475]
  [0.7071067811865475, -0.7071067811865475, 0.0, 0.0]
...