Maple通过引用传递参数

时间:2014-12-22 15:07:04

标签: pass-by-reference maple

我知道在Maple中传递参数的方式总是按值,所以我想知道是否有办法在Maple过程中通过引用传递参数。 我已经阅读了有关REF标识符的内容,但我还不太清楚.. 有人了解它吗?

1 个答案:

答案 0 :(得分:1)

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

在Maple rtables(Matrix,Vector,Array)中,表格通过引用传递,允许在这些可变结构上进行就地语义。

否则过程调用的参数主要由值完成。也就是传递名称(变量)的值。在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