Несколько операторов в математической функции
Я хотел знать, как оценивать несколько операторов в функции в Mathematica.
Например.
f[x_]:=x=x+5 and then return x^2
Я знаю, что это многое может быть изменено как (x+5)^2
, но изначально я хотел прочитать данные из файла в функции и распечатать результат после выполнения некоторых манипуляций с данными.
Ответы
Ответ 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