Я согласен с ответом от zacherates.
Но вы можете сделать вызов intern () в ваших нелиберальных строках.
Из примера zacherates:
// ... but they are not the same object
new String("test") == "test" ==> false
Если вы ставите нелитеральное равенство строки, это правда
new String("test").intern() == "test" ==> true
Я думаю, что уместная переменная здесь уместна. Примерно так:
for k:1 thru 5 do
p[k] : make_my_polynomial(k);
Тогда p[1]
, ..., p[5]
- ваши полиномы.
Когда вы назначаете подписанную переменную, например, что-то вроде foo[bar]: baz
, где foo
еще не определено как список или массив, Maxima создает так называемый «необъявленный массив», который является просто справочной таблицей.
РЕДАКТИРОВАТЬ: Вы можете ссылаться на подписанные переменные, не назначая им никаких значений. Например. вместо x^2 - 3*x + 1
вы можете написать u[i]^2 - 3*u[i] + 1
, где u[i]
еще не назначено какое-либо значение. Многие (большинство?) Функций обрабатывают подписанные переменные так же, как и неподписанные, например, diff(..., u[i])
, чтобы дифференцировать w.r.t. u[i]
.