ОК, это довольно загадочно, хотя теперь я понимаю, что происходит.
subst
- это последовательная (одна за другой) замена, поэтому subst([F1 = ..., F2 = ...], ...)
эквивалентно subst(F2 = ..., subst(F1 = ..., ...))
. То есть сначала замените F1
, а затем замените F2
на результат.
Однако результат subst(F1 = [x1, y1, z1], F1 - F2)
равен [x1 - F2, y1 - F2, z1 - F2]
. Теперь вы можете видеть, что произойдет, если вы подставите F2
в него - вы получите грязный результат вложенного списка.
Я думаю, что если вы попытаетесь psubst
(параллельное замещение), вы получитеожидаемый результат.
(%i2) forces:[
F1=[x1,y1,z1],
F2=[x2,y2,z2]
];
(%o2) [F1 = [x1, y1, z1], F2 = [x2, y2, z2]]
(%i3) equations:[F3=-F2];
(%o3) [F3 = - F2]
(%i4) subst(equations, F1 + F3);
(%o4) F1 - F2
(%i5) psubst (forces, %o4);
(%o5) [x1 - x2, y1 - y2, z1 - z2]
(%i6) psubst(forces, subst(equations, F1 + F3));
(%o6) [x1 - x2, y1 - y2, z1 - z2]