Frage

Auf Seite 195 von Pierces TAPL-Buch gibt er an, dass man einen Downcast-Operator durch eine Art dynamischen Typprüfung ersetzen kann.Dann gibt er folgende Regeln vor:

T-Typentest:

$\dfrac{\Gamma \vdash t_1:S \;\;\Gamma,x:T \vdash t_2:U \;\;\Gamma \vdash t_3: U}{\Gamma \vdash ext {wenn } t_1 ext { in } T ext { dann} x \bis t_2 ext { sonst} t_3 \bis t_3:U}$

E-Typprüfung1:

$\dfrac {\vdash v_1:T}{ ext{wenn } v_1 ext{ in } T ext { dann} x \zu t_2 ext { sonst} t_3 \ zu [x \ mapsto v_1] t_2}$

E-Typprüfung2:

$\dfrac { dash v_1:T}{ ext{wenn } v_1 ext{ in } T ext{ dann} x \bis t_2 \ text { sonst} t_3 \ bis t_3}$

Es gibt keine weitere Erklärung und ich weiß nicht, wie ich diese Regeln interpretieren soll.Bei der Überprüfung stelle ich fest, dass die erste eine Tippregel und die zweite und dritte Bewertungsregeln sind.Die Syntax ist jedoch etwas seltsam.Was sind die Pfeile in jedem Zweig des if?Warum das if das beinhaltet insyntax?

War es hilfreich?

Lösung

Die erste Regel T-Typetest ist eine Typprüfregel.Lass es uns zusammen lesen.Erstens, $\Gammastrahlung$ ist nicht wichtig (zumindest bei einer ersten Lesung).Wir haben folgende Räumlichkeiten:

  1. $t_1$ hat typ $R$
  2. wenn $x$ hat typ $T$ dann $T_2$ hat typ $U$
  3. $t_3$ hat typ $U$

Die Schlussfolgerung ist, dass wir einen Ausdruck vom Typ bekommen $U$ (Ich denke, Ihre Transkription sollte "$:U$" statt $\ bis t_3$ Schlussfolgerung):$$\mathrm{wenn}\;t_1 \;\Mathematik{in}\;T \;\mathrm{dann}\;x \bis t_2 \;\mathrm{sonst}\;t_3 \Markierung{1}$$ Die Bedeutung dieses Ausdrucks kann nicht verstanden werden, wenn man sich die beiden anderen Regeln ansieht, bei denen es sich um eine kleinschrittige Operationssemantik handelt.Hier ist eine falsche Erklärung, die wir gleich korrigieren werden:

  1. Wenn $t_1$ hat typ $T$ dann wird (1) ausgewertet zu $t_2$ mit $x$ ersetzt durch $t_1$.Dies ist der Fall bei "downcast", d.h., $t_1$ ist niedergeschlagen von $R$ zu $T$, ist der Downcast-Wert gebunden an $x$ und dann $t_2$ ausgeführt wird.

  2. Wenn $t_2$ hat keinen Typ $T$ dann wird (1) ausgewertet zu $t_3$.Dies ist der "Standard", den wir verwenden, wenn der Downcast nicht möglich ist.

Die obige Erklärung ist falsch, weil wir verwenden sollten $v_1$ statt $t_1$, mit dem der Autor Ihnen sagt:zuerst bewerten $t_1$ zu $v_1$, und führen Sie dann den Downcast aus.

In einer imaginären OO-Sprache könnte dasselbe ungefähr so geschrieben werden:

S t1 = ...;
...
if (t1 instanceof T) {
  T x = (T)t1;
  t2;
} else {
  t3;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top