我知道在Maple中传递参数的方式总是按值,所以我想知道是否有办法在Maple过程中通过引用传递参数。 我已经阅读了有关REF标识符的内容,但我还不太清楚.. 有人了解它吗?
答案 0 :(得分:1)
你提到的REF
很可能只是`define_external中参数的限定符,用于链接到Maple内核和解释库之外的编译函数。对于Maple程序,它没有在更广泛的意义上提供传递参考。
在Maple rtables(Matrix,Vector,Array)中,表格通过引用传递,允许在这些可变结构上进行就地语义。
否则过程调用的参数主要由值完成。也就是传递名称(变量)的值。在Maple的过程调用的正常评估规则中,传递的名称被预先评估,它们的值成为过程参数。
但是如果名称在非评估引号(单右引号)内传递,则参数只是名称,而不是其值。那么在程序调用中可以使用该名称。并且该过程甚至可以分配给该名称(产生副作用)。或者程序可以进行另一次评估,以获得该值。因此,在这种情况下,参数是按名称传递的,它以某种方式通过引用传递。
获得相同效果的其他方法涉及构造过程定义,以便通过名称而不是值传递参数。在这种情况下,调用该程序时不需要额外的重估报价。
请注意以下对p1
和p2
的调用方式有何不同。如果用不同类型的参数调用它们,你也可以试验发生的事情(各种错误信息)。
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