我正在撰寫一個需要可變數量的符號變數的腳本,并且正在努力理解如何評估結果運算式
MWE:
(%i1) foo:makelist(f[i],i,3);
(foo) [f[1],f[2],f[3]]
(%i2) bar:lreduce("*",foo);
(bar) f[1]*f[2]*f[3]
(%i3) vals:[1,2,3];
(vals) [1,2,3]
(%i4)
ev(bar,foo:vals);
(%o4) f[1]*f[2]*f[3]
在這里,我想評估產品的f[1]:1、f[2]:2和f[3]:3。
以下作業:
ev(bar,lambda([L], for i thru length(L) do f[i]:L[i])(vals));
但是,我認為可能有更直接/實用的方法;也許是一種完全不同的宣告符號變數的方式?
uj5u.com熱心網友回復:
在這種情況下,由于自由變數只是下標f[1], f[2], f[3],您可以f臨時分配一個串列,然后它會找出適當的值:
(%i6) e: f[1]*f[2]*f[3];
(%o6) f f f
1 2 3
(%i7) ev(e, f = [1, 2, 3]);
(%o7) 6
(%i8) ev(e, f = [a, b, 7]);
(%o8) 7 a b
更一般地,處理此類問題的最直接方法是形成一個方程串列,然后代入運算式。例如:
(%i12) e: x*y*z;
(%o12) x y z
(%i13) l: map ("=", [x, y, z], [11, 22, 33]);
(%o13) [x = 11, y = 22, z = 33]
(%i14) subst (l, e);
(%o14) 7986
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358054.html
下一篇:在SAS中將時間變數轉換為數值
