Понимание Trace *

Добрый день,

При попытке понять последовательность оценки 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.

5
задан Community 23 May 2017 в 09:58
поделиться