回复:傳遞變量傳遞變量名而不是變量值像 { 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;
分享和交流結果視窗