Добрый день,
При попытке понять последовательность оценки Mathematica с помощью стандартных команд Trace
и TraceScan
и их красивых визуальных представлений, разработанных в недавнем потоке , я столкнулся с некоторыми двусмысленностями в их поведении.
Прежде всего, когда я оцениваю
In [1]: = Trace [a + 1, TraceOriginal-> True]
, я получаю
Out [1] = {a +1, {Plus}, {a}, {1}, a + 1,1 + a, {Plus}, {1}, {a}, 1 + a}
Все подсписки соответствуют подоценкам ( как указано в документации). Последнее выражение 1 + a
, вероятно, соответствует результату оценки, хотя это четко не указано в документации. Но что именно означают выражения a + 1
и 1 + a
в середине списка? Каким этапам оценки стандартной последовательности оценки они соответствуют?
Вторая странность связана с TraceScan
.Рассмотрим следующее:
В [1]: = list = {}; TraceScan [AppendTo [список, StyleForm [#, «Ввод»]] &, (a + 1), _, AppendTo [список, #] &]; list
Out [1] = { a + 1 , Plus , Plus, a , a, 1 , 1, 1 + a , Plus , Plus, 1 , 1, a , a, 1 + a, a +1}
Вы можете видеть, что последние два выражения в списке - это 1 + a
и a + 1
. Оба являются результатами (под) оценок. Но реальный результат - 1 + a
, поэтому я не понимаю, почему a + 1
находится в конце цепочки оценки? И почему нет a + 1
в середине цепочки оценки, как это было в случае Trace
? Это ошибка?
P.S. Эти результаты воспроизводятся в Mathematica 7.0.1 и 5.2.