2 Stimmen

Welche Arten von Sprachen erlauben die programmatische Erstellung von Variablennamen?

Diese Frage ist rein aus intellektueller Neugierde heraus gestellt.

Nachdem ich die Python-Sektion relativ oft durchstöbert habe, habe ich eine Reihe von Fragen gesehen, die ähnlich sind wie こん in dem jemand nach einer programmatischen Möglichkeit zur Definition globaler Variablen fragt. Einige von ihnen sind sich der Fallstricke bewusst, die exec , andere nicht.

Allerdings habe ich kürzlich in Stata programmiert, wo das Folgende üblich ist:

local N = 100
local i = 1

foreach x of varlist x1 - x`N' {
    local `x' = `i' * `i'
    ++i 
}

In der Stata-Sprache ist ein lokales Makro mit dem Namen N erstellt wird, und N wird zu 100 ausgewertet. In jeder Iteration der foreach Schleife, einen Wert aus x1 à x100 wird dem lokalen Makro x . Dann weist die Zeile innerhalb der Schleife das Quadrat von i zur Ausweitung der x , ein lokales Makro mit der gleichen Endung wie i . Das heißt, nach dieser Schleife x4 expandiert zu 4^2 und x88 erweitert sich auf 88^2.

In Python würde man etwas Ähnliches tun:

squares = {}

for x in range(1,101):
    squares[x] = x**2

Dann squares[7] ist gleich 7^2.

Dies ist ein recht einfaches Beispiel. Es gibt eine Menge anderer Verwendungsmöglichkeiten für Stata-Makros. Sie können sie zum Beispiel verwenden, um Funktionen zu übergeben, die ausgewertet werden sollen:

local r1 "regress"
local r2 "corr"

foreach r of varlist r1-r2 {
     ``r'' y x
}

Die doppelten Häkchen um r erweitern Sie dieses Makro zweimal, zuerst zu r1 / r2 dann an regress / corr mit dem Ergebnis der Durchführung einer linearen Regression mit y als die abhängige und x als unabhängige Variable, und dann die Korrelation zwischen y y x . Es sind sogar noch komplexere Dinge möglich.

Meine Frage ist im Grunde, fällt Stata in eine größere Kategorie von Sprachen, wo Variable Zuordnung/Auswertung nimmt diese Form der "Makro-Zuweisung/Erweiterung"? Bonuspunkte für jede Erklärung, warum eine Sprache so aufgebaut ist, und/oder Beispiele für ähnliche Konstrukte in anderen Sprachen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X