Основная причина b+c+a+d
становится a+b+c+d
в Mathematica, потому что Plus
имеет атрибут Orderless
.В общем, символ f
с атрибутом Orderless
означает, что элементы f
в выражении f[e1, e2, e3]
, элементы ei
должны быть отсортированы в каноническом порядке, и, в частности, канонический порядок Mathematica эквивалентенOrderedQ
и Ordering
.
Orderless
даже учитывается при сопоставлении с образцом:
In[47]:= a+b+c+d /. a+c -> e
Out[47]= b+d+e
Настоятельно рекомендуется НЕ УДАЛЯТЬ атрибут Orderless
от Plus
, потому что последствия могут быть ужасными для многих функций в Mathematica.
Как отмечали другие авторы, лучше всего просто определить свою собственную функцию, которая НЕ является Orderless
и поэтому сохранитпорядок аргументов.Вы также можете найти HoldForm
полезным в очень ограниченных обстоятельствах.
Также обратите внимание, что ничто не мешает вам набирать символы в выражении в любом порядке, который вы хотите в блокноте, если вы не оцениваетеи т. д.