Подтвердить что ты не робот

Несколько операторов в математической функции

Я хотел знать, как оценивать несколько операторов в функции в Mathematica.
Например.

f[x_]:=x=x+5 and then return x^2

Я знаю, что это многое может быть изменено как (x+5)^2, но изначально я хотел прочитать данные из файла в функции и распечатать результат после выполнения некоторых манипуляций с данными.

4b9b3361

Ответ 1

Если вы хотите сгруппировать несколько команд и вывести последнее использование точки с запятой (;) между ними, например

f[y_]:=(x=y+5;x^2)

Просто не используйте a; для последнего утверждения.

Если ваш набор команд увеличивается, вы можете использовать структуры видимости, такие как Module или Block.

Ответ 2

Вы ищете CompoundExpression (короткая форма ;):

f[x_]:= (thing = x+5 ; thing^2)

Скобки необходимы из-за очень низкого приоритета ;.

Как меня зовут Сабольч, вы не можете писать:

f[x_]:= (x = x+5 ; x^2)

См. этот ответ для объяснения и альтернатив.


Leonid, который вы должны слушать, говорит, что thing должен быть локализован. Я не делал этого выше, потому что хотел подчеркнуть CompoundExpression как конкретную подгонку для вашей, а затем "построить". Как написано, это повлияет на глобальное значение thing, которое может быть или не быть тем, что вы на самом деле хотите сделать. Если это не так, см. Ответ, указанный выше, а также:

Ответ 3

Несколько человек уже упомянули, что вы можете использовать CompoundExpression:

f[x_] := (y=x+5; y^2)

Однако, если вы используете ту же переменную x в выражении, что и в аргументе,

f[x_] := (x=x+5; x^2)

тогда вы получите ошибки при оценке функции числом. Это связано с тем, что := по существу определяет замену переменных шаблона из lhs, то есть f[1] оценивается (неверно) (1 = 1+5; 1^2).

Итак, как сказал Сджерд, используйте Module (или Block иногда, но этот предостерегает!), чтобы локализовать функциональную переменную:

f[x_] := Module[{y}, y=x+5; y^2]

Наконец, если вам нужна функция, которая изменила ее аргументы, вы можете установить атрибут HoldAll:

Clear[addFive]    
SetAttributes[addFive, HoldAll]
addFive[x_] := (x=x+5)

Затем используйте его как

a = 3;
addFive[a]
a