0

コードをテストします

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

戻りますが、の評価後a1*L[1]+a2*L[1]に取得する予定です。何か案は?a1*2+a2*2L[1]

ありがとう。

編集:

もう1つ質問があります。テストコードは次のとおりです。

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

a1関数テストで定義されたローカル変数を評価せずに、2 a1 +2a2になります。私は得ることを期待しています2*1+2*a2。さらにアイデアはありますか?

4

1 に答える 1

1

最初の行は、を使用した単なる方程式であり、を使用し=た実際の割り当てではありません:=。したがって、に割り当てを行っていませんでしたL

そして、不正確な引用符は、sum呼び出しで誤って適用され、あまりにも多くをラップします。

addの代わりにを使用sumして、の特別な評価ルールに依存しadd、不正確な引用符の必要性を取り除くこともできます。

> 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 に答える