/ / Maple che passa i parametri per riferimento: pass-by-reference, maple

Maple che passa i parametri per riferimento: pass-by-reference, maple

So che in Maple il modo di passaregli argomenti sono sempre di valore, quindi mi chiedo se c'è un modo per passare i parametri per riferimento in una procedura di Maple. Ho letto qualcosa sull'identificatore REF ma non ho capito molto bene .. Qualcuno che ne sa qualcosa?

risposte:

0 per risposta № 1

Quella REF hai menzionato è molto probabilmente solo il qualificatoreattorno ai parametri in un `define_external, usato per collegare funzioni compilate al di fuori del kernel di Maple e della libreria interpretata.Non fornisce il pass-per-riferimento in senso lato, per le procedure Maple.

In Maple Rtables (Matrix, Vector, Array) e le tabelle vengono passate per riferimento, consentendo la semantica sul posto su queste strutture mutevoli.

Altrimenti gli argomenti per le chiamate di procedura sono per lo piùfatto di valore. Ovvero, il valore del nome passato (variabile). Nelle normali regole di valutazione di Maple per le chiamate di procedura, i nomi passati vengono valutati in anticipo e i loro valori diventano gli argomenti della procedura.

Ma se il nome è passato all'interno di non valutazionevirgolette (virgolette singole) quindi l'argomento è solo il nome, piuttosto che il suo valore. Quindi quel nome è disponibile all'interno della chiamata di procedura. E la procedura può anche assegnare a quel nome (producendo un effetto collaterale). Oppure la procedura può fare un'altra valutazione, per ottenere il valore. Quindi, in questo scenario, il parametro viene passato per nome, che in un certo senso passa per riferimento.

Altri modi per ottenere lo stesso effetto coinvolgonocostruendo la definizione della procedura in modo che i parametri siano passati per nome anziché per valore. In tal caso non sono necessarie citazioni di non valutazione aggiuntive quando viene chiamata la procedura.

Nota come p1 e p2 sono chiamati diversamente, di seguito. Puoi anche sperimentare ciò che accade (vari messaggi di errore) se li chiami con diversi tipi di argomenti.

p1 := proc( x )
local y;
y := eval(x);
print( x, y );
x := y^2;
return NULL;
end proc:

m := 4;
m := 4

p1( "m" );
m, 4

m;
16

p2 := proc( x::uneval )
local y;
y := eval(x);
print( x, y );
x := y^2;
return NULL;
end proc:

m := 4;
m := 4

p2( m );
m, 4

m;
16