вчера провел незабываемые 5 часов, пытаясь разобраться, почему же программа для диссертации выдает неправильный результат для 1-й строки матрицы, и правильный для всех остальных (это для простоты, там конечно чтобы дойти до этого пришлось возиться). Вот две казалось бы эквивалентные записи одной функции:
Код:
f_1:=m->piecewise(m = 0, 2*Pi, Pi);
f_2:=m->`if`(m = 0, 2*Pi, Pi);
проверяем:
Код:
f_1(0);f_2(0);f_1(1);f_2(1);
дает
соответственно. Усложняем задачу:
Код:
eval(f_1(m), m=0); eval(f_2(m), m=0); eval(f_1(m), m=1); eval(f_2(m), m=1);
получяем
. Обратите внимание, что eval(f_2(m), m=0) дает
. Более того, если записать f_2(m), где m - символьная переменная, а не число, то результат также будет равен
. В то же время запись f_1(m) дает
. Получается, что синтаксис с `if` не определяет символьного выражения, а работает как макрос, если используется с eval-ом. Что это такое? Это так задумано (тогда хотелось бы увидеть цитату из документации Maple), или это баг? Все примеры разбирал на Maple v. 10.