この質問は、純粋に知的好奇心から出たものです。
Python のセクションを比較的頻繁に参照していると、これに似た質問がいくつか見られます。このような質問では、グローバル変数をプログラムで定義する方法を誰かが求めています。の落とし穴を知っている人もいれば、知らexecない人もいます。
ただし、私は最近、Stata でプログラミングを行っています。ここでは、次のことが一般的です。
local N = 100
local i = 1
foreach x of varlist x1 - x`N' {
local `x' = `i' * `i'
++i
}
Stata の用語では、 という名前のローカル マクロNが作成され、N100 に評価されます。foreachループの各反復で、 ~ からの値x1がx100ローカル マクロ に割り当てられxます。次に、ループ内の行はi、 の展開にの 2 乗を代入します。xこれは、 と同じ末尾を持つローカル マクロiです。つまり、このループの後、x44^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線形回帰を実行した結果、およびとの間の相関を示します。さらに複雑なものも可能です。yxyx
私の質問は基本的に、変数の割り当て/評価がこの形式の「マクロ割り当て/展開」をとる言語のより大きなカテゴリにstataが分類されますか? 言語がこのように設計される理由の説明、および/または他の言語での同様の構成の例に対するボーナスポイント。