Вопросы о программировании в Mathematica

paha73

Подскажите функцию типа Expand, но которая могла бы подразумевать некоммутативность поля

slsf

Хороший вопрос! Отличная функция Distribute как раз может делать то, что ты хочешь
Обрати внимание еще на оператор "**" - NonCommutativeMultiply.
Пример:
Distribute[(a+b)**(a+b)]
Успехов!

paha73

премного благодарна

paha73

Подскажите, почему первый in и второй in работают по разному, чем так замечательна функция Plus, что замена с ней не проходит?

slsf

И опять-таки хороший вопрос!
На самом деле все правильно и дело не в функции Plus. Посмотри чему равно твое правило преобразования:
 
 
In: Plus[u__] -> List[u]
Out: u__ -> {u}
 

То есть оно заменяет последовательность аргументов (1 или более ) a,b,c на List[a,b,c],
тем самым получаем преобразование Plus[a,b,c]->List[Plus[a,b,c]], что и выдает система.
Тонкость заключается в том, что система вычислила твое правило преобразования
 
 
In: Plus[u__] -> List[u]
Out: u__ -> {u}
 

, а затем уже применила его к исходному выражению.
Правило преобразования, для того, что ты хочешь осуществить, может быть записано более простым шаблоном (pattern) :
Plus->List , это правило заменяет просто заголовки выражений (Head).
Пример:

In:
Plus[a, b, c] /. Plus -> List
Out:
{a, b, c}

Надо заметить, что шаблоны тоже подчиняются арифметическим правилам!
То есть команда _+_ приведет к результату 2 _.
Полезные советы:
1 Всегда задумываться в какой последовательности система вычисляет твое выражение
2 Знать какую явную структуру имеют твои выражения (команда FullForm)
3 Ознакомиться с содержанием следующих страниц в HelpBrowser:
   
     HoldPattern
     Rule
     RuleDelayed
     Head

Успехов!
Пиши, если что
Ps: извиняюсь, возникли проблемы с форматированием вложенных тегов в форуме

paha73

очень помогаешь, спасибо

paha73

Function[{a, #}] & /@ SomeList1
Function[{#, b}] & /@ SomeList2
можно ли совместить пробную подстановку?
чтоб и для первого и для второго аргумента функции, но из разных списков?
не уверена, что понятно задаю вопрос, хочется что-то типа такого
Function[{#2}] & /@ {#1->SomeList1,#2->SomeList2}

paha73

Outer тебе поможет
Оставить комментарий
Имя или ник:
Комментарий: