Я хочу написать (как-то) расширенную функцию суммы, которая принимает сразу несколько индексов, но я не могу понять, как заставить ее работать. Вот то, что я в настоящее время:Принудительное выражение выражения индекса перед переходом к sum()
(%i1) nsum(indexes, expr) :=
if indexes = []
then expr
else nsum(rest(indexes), sum(expr, first(indexes),1, N)) $
(%i2) nsum([i,j], i+j), nouns;
sum: index must be a symbol; found intosym(first(indexes))
#0: nsum(indexes=[k,j],expr=k+j)
Я думаю, что это может быть исправлено, заставляя Maxima расширить first(indexes)
в символ перед переходом к sum
функции. Я пробовал ''(...)
и ev(..., nouns)
, но безуспешно.
Я думаю, что техника «apply» работает должным образом. Я считаю, что если я изменил '' k' на 'k' в определении' rot2' (т. Е. Удалил цитату), тогда 'rot2' дает в этом случае тот же результат, что и' rot'. –
@RobertDodier: Ах, похоже, я просто замалчивал эту цитату. Спасибо, что заметили это! – firegurafiku
@RobertDodier Можно ли избавиться от дополнительной оценки? Рассмотрим, '(% i1) display2d ложь $ (% i2) убить (l1, l2, l0) $ (% i3) l2: l1 $ (% i4) l1: l0 $ (% i5) expr: expr0 $ (% i6) применяется ('sum, [expr, i, 0, l2]); (% o6) expr0 * (l0 + 1) (% i7) sum (expr0, i, 0, l2); (% o7) expr0 * (l1 + 1) ' – slitvinov