0

我下载了一个 Maple proc,它返回一个向量(比如,v)表达式,其中每个单独的表达式都是根据其他带有符号条目的向量(p,a)。例如:

> v := myProc();
> v[1];
p[2] + a[1]
> v[2];
p[5] + a[3] + sqrt(a[1])
...

我希望能够通过将数值分配给向量“p”和“a”来评估向量“v”中的表达式,但是如果我如下定义向量“a”和“p”

a := Vector(3,1):  
p := Vector(5,2):

我得到的结果是一个向量的值被重新分配,但另一个向量的值没有:

> v[1]; 
p[2] + 1
> v[2];
p[5] + 1 + sqrt(1)

任何有关此问题性质的见解将不胜感激。我一直在浏览与此 proc 对应的 Maple 文件,以尝试在 Vector 'v' 返回表达式之前将值分配给 'p' 和 'a' ,但这相对不成功,因为我对 Maple 和主过程中的众多子过程似乎最终需要符号向量才能成功返回向量'v'。

4

2 回答 2

0

您是否完全确定p已成功分配呼叫的结果Vector(5,2)

正如预期的那样,以下对我来说有效。

restart:

myProc:=proc()
           local w;
           w:=Vector(2);
           w[1]:=p[2] + a[1];
           w[2]:=p[5] + a[3] + sqrt(a[1]);
           return w;
        end proc:

v:=myProc():

v[1];
                             p[2] + a[1]

v[2];
                                         (1/2)
                       p[5] + a[3] + a[1]     

a:=Vector(3,1):
p:=Vector(5,2):

v[1];
                                  3

v[2];
                                  4

我可以想出一些棘手的方法来编写myProc它,使其行为与您描述的一样,但它们大多是人为的。例如,我p[5]可以p[2]myProc.

如果在查询v[2](并获得涉及未评估的索引引用的意外输出p)之后立即发出命令,您会得到什么,

%;

?

如果在有问题的地方,你只发出命令,你会得到什么,

p;

?

如果在有问题的地方发出命令,你会得到什么,

map(eval,v);

?

您是否可以随意提供指向 来源的 URL myProc

于 2013-10-03T17:03:18.170 回答
0

返回的p[i]第一个 Vector 中的条目中的xearm是所谓的转义局部变量。因此,它们的地址与您的全局pVector 条目的地址不同,这就是它们无法按您预期进行评估的原因。

您可以按如下方式解决此问题。代替,

v:=f[1];

经过,

v:=f[1];
v:=convert(v,`global`);

由返回的第一个结果中的a[i]and似乎被索引到全局名称and中,并且没有与 . 相同的问题。b[i]xearmabp[i]

使用我之前回答中的正常工作示例,这是一个有问题的版本,它表现出类似的行为。

restart:

myProc:=proc()
       local w, p;
       w:=Vector(2);
       w[1]:=p[2] + a[1];
       w[2]:=p[5] + a[3] + sqrt(a[1]);
       return w;
    end proc:

v:=myProc():

v[1];
                             p[2] + a[1]

v[2];
                                         (1/2)
                       p[5] + a[3] + a[1]     

a:=Vector(3,1):
p:=Vector(5,2):

v[1];
                              p[2] + 1

v[2];
                              p[5] + 2

v:=convert(v,`global`):

v;
                                 [3]
                                 [ ]
                                 [4]
于 2013-10-04T00:41:56.803 回答