回复:传递变量传递变量名而不是变量值像 { x, y } 这样的列表包含变量的名称,而不是它们的值。 一些 JSL 函数会挖掘出这些值; line( {x1, y1}, {x2, y2} ) 例如。
EvalList 函数接受一个包含表达式的列表,可能就像一个变量名一样简单,计算它们并返回一个新列表 { 3, 4 }。
Insert Into 函数注意到它插入的值是一个列表,并解压缩列表以获取要插入的元素。 这就是为什么你有一个包含一个元素的列表是另一个包含两个元素的列表的原因:你想插入两个元素列表而不打开它,所以你将它包装在一个列表中。
但是现在你必须弄清楚如何在嵌套列表的内部列表上执行 eval 列表。 你可以这样做,像这样:
x=3;
y=4;
evallist({evallist({x,y})}) // {{3, 4}}
这是一个更容易或更难理解的快捷方式
x=3;
y=4;
aslist(x||y) // {{3, 4}}
AsList 将矩阵 upack 成一个列表,并制作一个行元素列表的列表; ||连接运算符将两个(或更多)数字放在一起形成一个行矩阵。
回复:传递变量传递变量名而不是变量值感谢您的解释! 使用双 evallist 对我有用。
传递变量传递变量名称而不是变量值使用 JMP 15.2.1。
我想我一定对变量在 JSL 中的工作方式有误解。我已经遇到过这个问题好几次了,最后想明白我做错了什么。
我有一个函数,在其中进行一些计算,将结果存储在变量中,然后尝试将结果插入到列表中。 我知道变量包含我想要的值,但是当我尝试将它们添加到列表中时,它将变量名称而不是变量的值添加到列表中。 因为这些是本地定义的变量,所以这会导致该函数范围之外的错误。
我已经尝试在我能想到的任何地方使用 Eval/Eval List,但这也不起作用。
如何使返回的列表包含变量中的值。
提前致谢!
list = {{3,4}, {1,5}, {3,2}};
deltaX = 1;
deltaY = 2;
updateList = Function({cl, dx, dy},
{newX, newY},
newX = cl[1][1] + dx;
newY = cl[1][2] + dy;
show(newX);
Insert Into(cl, {{newX, newY}}, 1);
show(cl);
return(cl);
);
list2 = updateList(list, deltaX, deltaY);
show(list2);
//this errors because list2[1][1] contains newX instead of the value 4
//list2[1][1] + 1;
分享和交流结果视窗