Я вижу, что если вы напишите функцию как f(x) := a0*x
, а затем ev(f(z), a0=99)
, вы получите ожидаемый результат 99*z
.Поэтому различное поведение для f(x) := a[0]*x
является ошибкой;Я отправлю отчет об ошибке.
В общем случае более предсказуемая стратегия замены заполнителей значениями заключается в использовании функции subst
, которая подставляет значения в выражение.В этом случае вы можете написать:
subst (a[0] = 99, f(z));
Если у вас есть несколько значений для замены, вы можете написать:
subst ([a[0] = 99, a[1] = 42, a[2] = 2*foo], myexpr);
, где myexpr
- это выражение, содержащее a[0]
, a[1]
и a[2]
.
subst
- это последовательное (одно значение за раз) замещение.Смотрите также psubst
, который является параллельной заменой (все значения одновременно).