关于串联“a||b”在枫树?

发布于 2025-01-03 17:48:01 字数 519 浏览 0 评论 0原文

我测试代码

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

它返回 a1*L[1]+a2*L[1],但我希望在评估 a1*2+a2*2 后得到 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);

将产生结果 2a1 + 2a2 不评估函数测试中定义的局部变量a1。 我期望得到2*1+2*​​a2。还有进一步的想法吗?

I test the code

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

It returns a1*L[1]+a2*L[1], but I expect to get a1*2+a2*2 after evaluation of L[1].
Any ideas?

Thanks.

EDIT:

I have one further question. Here's the test code:

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

will result
2 a1 + 2 a2
without evaluating a1 which is a local variable defined in function test.
I expect to get 2*1+2*a2. Any further idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

微凉徒眸意 2025-01-10 17:48:01

您的第一行只是一个带有 = 的方程式,而不是带有 := 的实际赋值。所以您没有对 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

Your first line is just an equation, with =, and not an actual assignment with :=. So you weren't doing an assignment to L.

And the uneval quotes are misapplied, in the sum call, and wrap too much.

You could also use add instead of sum, to rely on the special evaluation rules of add and thus get rid of the need for the uneval quotes.

> 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文