che sto cercando di Grok con Julia di @evalpoly
macro. Funziona quando fornisco manualmente i coefficienti, ma sono stato in grado di decifrare come fornire questi tramite una serieJulia macro @evalpoly con varargs
julia> VERSION
v"0.3.5"
julia> @evalpoly 0.5 1 2 3 4
3.25
julia> c = [1, 2, 3, 4]
4-element Array{Int64,1}:
1
2
3
4
julia> @evalpoly 0.5 c
ERROR: BoundsError()
julia> @evalpoly 0.5 c...
ERROR: BoundsError()
julia> @evalpoly(0.5, c...)
ERROR: BoundsError()
Qualcuno mi può punto nella giusta direzione su questo?
Aggiunto dopo aver visto le grandi risposte a questa domanda
C'è una sottigliezza che non avevo visto fino a quando ho giocato con alcune di queste risposte. Il z
argomento @evalpoly
può essere una variabile, ma i coefficienti sono presumibilmente letterali
julia> z = 0.5
0.5
julia> @evalpoly z 1 2 3 4
3.25
julia> @evalpoly z c[1] c[2] c[3] c[4]
ERROR: c not defined
Guardando l'uscita della espansione di questo ultimo comando, si può vedere che è effettivamente il caso che z è assegnato ad una variabile nell'espansione ma che i coefficienti sono inseriti letteralmente nel codice.
julia> macroexpand(:@evalpoly z c[1] c[2] c[3] c[4])
:(if Base.Math.isa(z,Base.Math.Complex)
#291#t = z
#292#x = Base.Math.real(#291#t)
#293#y = Base.Math.imag(#291#t)
#294#r = Base.Math.+(#292#x,#292#x)
#295#s = Base.Math.+(Base.Math.*(#292#x,#292#x),Base.Math.*(#293#y,#293#y))
#296#a2 = c[4]
#297#a1 = Base.Math.+(c[3],Base.Math.*(#294#r,#296#a2))
#298#a0 = Base.Math.+(Base.Math.-(c[2],Base.Math.*(#295#s,#296#a2)),Base.Math.*(#294#r,#297#a1))
Base.Math.+(Base.Math.*(#298#a0,#291#t),Base.Math.-(c[1],Base.Math.*(#295#s,#297#a1)))
else
#299#t = z
Base.Math.+(Base.Math.c[1],Base.Math.*(#299#t,Base.Math.+(Base.Math.c[2],Base.Math.*(#299#t,Base.Math.+(Base.Math.c[3],Base.Math.*(#299#t,Base.Math.c[4]))))))
end)
[PR # 7186] (https://github.com/JuliaLang/julia/pull/7186) sarebbe permettere questo attraverso una versione di funzione. Sembra che potrebbe usare un po 'di supporto - aggiungere un commento che esprima il tuo desiderio di vederlo in base! –
Ian, grazie per la tua opinione. Lo apprezzo certamente perché mi aiuta a macinare le macro di Julia in generale, non solo questo particolare problema. Proverò a dare seguito al tuo suggerimento per aggiungere il problema nei prossimi giorni. –
Ho aggiornato per il tuo aggiornamento, fammi sapere se è chiaro. – IainDunning