Mathematicaの関数で複数のステートメントを評価する方法を知りたかったのです。
例えば。
f[x_]:=x=x+5 and then return x^2
これは(x+5)^2
として変更できることは知っていますが、元々は関数内のファイルからデータを読み取り、データ操作を行った後に結果を出力したかったのです。
あなたが探しているのは CompoundExpression
(短縮形;
):
f[x_]:= (thing = x+5 ; thing^2)
;
の優先順位が非常に低いため、括弧が必要です。
Szabolcsが私を呼んだように、あなたは書くことができません:
f[x_]:= (x = x+5 ; x^2)
説明と代替案については、 この回答 を参照してください。
Leonid 、あなたが聞くべき人は、thing
をローカライズする必要があると言います。 CompoundExpression
を「andthen」コンストラクトに特に適合するものとして強調したかったので、上記ではこれを行いませんでした。書かれているように、これはthing
のグローバル値に影響します。これは、実際に実行したいことである場合とそうでない場合があります。そうでない場合は、上記のリンク先の回答と、次の両方を参照してください。
何人かの人々はあなたが使うことができるとすでに述べました CompoundExpression
:
f[x_] := (y=x+5; y^2)
ただし、式で引数と同じ変数x
を使用すると、
f[x_] := (x=x+5; x^2)
次に、数値を使用して関数を評価するときにエラーが発生します。これは、:=
が基本的にlhsからのパターン変数のreplacementを定義するためです。つまり、f[1]
は(正しくない)と評価されます。 (1 = 1+5; 1^2)
。
したがって、Sjoerdが言ったように、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