0

我测试代码

    L:=[2,1];
    sum('a||b*L[1]', 'b' = 1 .. 2);

它返回a1*L[1]+a2*L[1],但我希望a1*2+a2*2在评估后得到L[1]. 有任何想法吗?

谢谢。

编辑:

我还有一个问题。这是测试代码:

    L := [2, 1]
    test := proc (i) local a1; a1 := 1; add(a || b*L[i], b = 1 .. 2) end proc
    test(1);

将导致 2 a1 + 2 a2 不评估a1哪个是函数测试中定义的局部变量。我期望得到2*1+2*a2. 还有什么想法吗?

4

1 回答 1

1

您的第一行只是一个等式,带有=,而不是带有 的实际分配:=。所以你没有做任务L

并且 uneval 引号在sum调用中被误用,并且包装太多。

您也可以使用add而不是sum, 来依赖特殊的评估规则,add从而摆脱对 uneval 引号的需要。

> L:=[2,1];                          
                              L := [2, 1]

> add(cat(a,b)*L[1], b = 1 .. 2);
                              2 a1 + 2 a2

> add((a||b)*L[1], b = 1 .. 2);  
                              2 a1 + 2 a2

> sum('a||b'*L[1], 'b' = 1 .. 2);    
                              2 a1 + 2 a2

> sum('cat(a,b)'*L[1], 'b' = 1 .. 2);
                              2 a1 + 2 a2
于 2012-02-08T18:05:18.050 回答