2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 [Mathematica 8] Не вычислять аргумент функции
Сообщение04.10.2014, 19:26 
Заслуженный участник


27/04/09
28128
Знаю про атрибуты HoldFirst и пр., но у меня несколько другая ситуация: вычисляться не должно e в f[...][e], а атрибуты можно присвоить только символу.

Попробовал так:
Код:
f1[var_, indexCount_][HoldPattern[e_]] := Sum @@ Prepend[{{var, indexCount}}, Unevaluated@e]
f2[var_, indexCount_] := Function[{e}, Sum @@ Prepend[{{var, indexCount}}, Unevaluated@e], HoldFirst]
но всё тщётно: в процессе вычисления
Код:
a = {1, 2, 3};
a[[i]] // f1[i, 3]
a[[i]] // f2[i, 3]
всё же выводятся сообщения Part::pspec о том что i — не целое и не список целых, т. е. вычисление e происходит, ну и Trace об этом сообщит.

Может быть, это всё-таки как-то можно сделать?

 Профиль  
                  
 
 Re: [Mathematica 8] Не вычислять аргумент функции
Сообщение04.10.2014, 22:49 
Заслуженный участник


25/02/11
1797
Вот так
Код:
f1[var_, indexCount_][e_] :=  Sum @@ Prepend[{{var, indexCount}}, ReplacePart[e, 2 -> var]];

она считает, но предупреждение выдает.

Если не писать индекс у a, который все равно уже есть в аргументе f1, то все работает:
Код:
f1[var_, indexCount_][e_] := Sum[e[[var]], {var, indexCount}];
a // f1[i, 3]

 Профиль  
                  
 
 Re: [Mathematica 8] Не вычислять аргумент функции
Сообщение04.10.2014, 23:50 
Заслуженный участник


27/04/09
28128
Как раз хотел с индексами — написал две функции для упрощения формул с индексами (пакет тензорной алгебры ставить не хочется), чтобы
Код:
expr // s[i, j, ...] = Sum[expr, {i, $IndexCount}, {j, $IndexCount}, ...]
expr // t[i, j, ...] = Table[expr, {i, $IndexCount}, {j, $IndexCount}, ...]
т. е. индексы будут не обязательно в фиксированном положении, expr может содержать много чего (умножение, сложение). Хотя, видимо, из вычисляющегося будет содержать только Part. Если другого способа нет, придётся добавлять к коду отключение-включение Part::pspec. :-)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group