2014-12-22 142 views
0

我知道在Maple中传递参数的方式总是通过值,所以我想知道是否有方法通过引用在Maple过程中传递参数。 我已阅读了关于REF标识符的一些信息,但我还没有很好的理解。 有人知道这件事吗?Maple通过引用传递参数

回答

0

你提到的REF很可能只是`define_external中的参数限定词,用于链接到Maple内核和解释库之外的编译函数。对于Maple程序,它不提供更广义的传递引用。

在Maple rtables(矩阵,向量,数组)和表通过引用传递,允许在这些可变结构上的就地语义。

过程调用的其他参数大多是通过值完成的。也就是通过名称(变量)的值。在Maple的过程调用的正常评估规则中,传递的名称将在前面进行评估,并且它们的值将成为过程参数。

但是,如果名称在未评估报价(单引号)内传递,那么参数只是名称而不是其值。那么这个名字在过程调用中可用。该程序甚至可以分配给该名称(产生副作用)。或者程序可以做另一次评估,以获得价值。所以,在这种情况下,参数是按名称传递的,这是通过引用传递的方式。

获得相同效果的其他方法包括构造过程定义,以便参数按名称而非值传递。在这种情况下,当程序被调用时不需要额外的评估报价。

请注意,下面将如何调用p1p2。如果用不同类型的参数调用它们,您也可以试验发生了什么(各种错误消息)。

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 
+0

非常详尽..谢谢! –