With宣言でローカル変数を再利用


2

Mathematica.SEの豊かさを考えると、私は私の答えを見つけることができませんでした...私は非常に申し訳ありませんが重複している場合は驚いています。私はそれが0代わりのt1印刷するだろうと思った

With[{t1=0,t2=t1},t1+t2] (* -> t1 *) 

は、次の例を考えてみましょう。

実際、Traceができます:

[email protected][{t1 = 0, t2 = t1}, t1 + t2] 
(* {With[{t1=0,t2=t1},t1+t2],0+t1,t1} *) 

t1は未評価のままです。 WithHoldAll属性があると述べホールドの複雑な用法と私とdocumentationのようなMathematicaの初心者のためにこのような属性を考慮し

は、私は様々な場所でEvaluateを挿入しようとした、とも(私は違いを認めModuleによってWithを交換してみましたWithModuleは私には明らかではありません)、t1の代わりに0と印刷されたものは何もありません。

は、どのように私は、Mathematicaはt1With内で宣言t2t2=t1を評価するために知らせることができますか?

編集:最初のコメントと回答のおかげで、便利で密接に関連した質問と回答のいくつかはhereです。

  0

字句と動的スコープの本当に良い説明は[こちら](http://stackoverflow.com/questions/6236458/plot-using-with-versus-plotあります-using-block-mathematica/6236808#6236808)と[ここ](http://mathematica.stackexchange.com/questions/559/what-are-the-use-cases-for-different-scoping-constructs)を参照してください。あなたの例では、 '' {'t1 = 0}、{{t2 = t1}、(t1 + t2)}]]で' 'Block'を試したくない場合、' 'With''を2つ入れ子にすることができます。' 27 8月. 132013-08-27 10:21:27

  0

これはよく知られています。これがMathematicaの仕組みです。何も新しい。 'Module {{x = 0、y = x}、Print [y]]'を試してください。 '0'ではなく' x'を出力します。 Mathematicaは 'on the fly 'のパラメータを更新しない。したがって、それは割り当てられたばかりの更新された値を使用しません。これはいつもそれだった。 27 8月. 132013-08-27 10:24:03

+1

私はこのようなミスをしないように、私が使用する経験則(いくつかの変数をいくつかの値に設定していると思っていますが、そうではありません)は、ローカル変数では決して 'p1 = p2'を使用しないリスト。 'p2'を' p1'に設定しなければならない場合は、パラメータリストのあとで - > 'モジュール[{p1 = 0、p2}、p2 = p1 ....]'これを覚えておいてください。 27 8月. 132013-08-27 10:37:44

  0

@SimonWoodsこれは、あなたが参照している*非常に興味深い* q/aを読む前に、この質問の答えを知っている人と同じ質問ではありません。実際に、私はあなたがコメントしている間にこれを読んでいました。 27 8月. 132013-08-27 13:14:52

  0

@Nasserすぐにあなたのアドバイスをすぐに使用していきます。私は質問を終えることができるようにそれを答えとして入れる価値があると思いませんか? 27 8月. 132013-08-27 13:17:51

2

LetLあなたが欲しいものを正確に行います。あなたは実装hereを見ることができます。

LetL[{t1 = 0, t2 = t1}, t1 + t2] 
  0

'With'と' Module'にどのように 'LetL'を使うのですか?モジュール[{LetL [{a = 1、b = a + 1、c = a + b + 2}、{a、b、c}]}、Print [a]; ]は動作しませんでした。モジュール[LetL [{a = 1、b = a + 1、c = a + b + 2}、{a、b、c}]、Print [a]; ] 'はうまくいかなかった。使用する別の構文はありますか?質問は 'With'と' Module'の文脈でこれを使うことを頼んでいるので、私はそれを行うことができます、私は構文を理解できません:) 27 8月. 132013-08-27 12:19:13

  0

@Nasser 'Module'の' Attributes'は何ですか? ?そこにあなたの答えがあります。 :P 27 8月. 132013-08-27 13:27:36