この質問は、純粋に知的好奇心から出たものです。
Python のセクションを比較的頻繁に参照していると、これに似た質問がいくつか見られます。このような質問では、グローバル変数をプログラムで定義する方法を誰かが求めています。の落とし穴を知っている人もいれば、知らexec
ない人もいます。
ただし、私は最近、Stata でプログラミングを行っています。ここでは、次のことが一般的です。
local N = 100
local i = 1
foreach x of varlist x1 - x`N' {
local `x' = `i' * `i'
++i
}
Stata の用語では、 という名前のローカル マクロN
が作成され、N
100 に評価されます。foreach
ループの各反復で、 ~ からの値x1
がx100
ローカル マクロ に割り当てられx
ます。次に、ループ内の行はi
、 の展開にの 2 乗を代入します。x
これは、 と同じ末尾を持つローカル マクロi
です。つまり、このループの後、x4
4^2 にx88
展開され、88^2 に展開されます。
Python では、同様のことを行う方法は次のようになります。
squares = {}
for x in range(1,101):
squares[x] = x**2
次に、squares[7]
7^2 に等しくなります。
これはかなり単純な例です。stata マクロには他にも多くの用途があります。評価する関数を渡す方法としてこれらを使用できます。たとえば、次のようになります。
local r1 "regress"
local r2 "corr"
foreach r of varlist r1-r2 {
``r'' y x
}
周りの二重の目盛りは、r
そのマクロを 2 回、最初にr1
/r2
に、次にregress
/に展開し、従属変数および独立変数としてcorr
線形回帰を実行した結果、およびとの間の相関を示します。さらに複雑なものも可能です。y
x
y
x
私の質問は基本的に、変数の割り当て/評価がこの形式の「マクロ割り当て/展開」をとる言語のより大きなカテゴリにstataが分類されますか? 言語がこのように設計される理由の説明、および/または他の言語での同様の構成の例に対するボーナスポイント。