Ich habe über abhängige Typen gelesen und ich habe eine Frage, um sicherzustellen, dass ich nicht etwas falsch verstehe. Die Wikipedia page on dependent types startet damit:Sind durch Werte parametrisierte Generika die gleichen wie abhängige Typen?
In der Informatik und Logik ist ein abhängiger Typ ein Typ, dessen Definition von einem Wert abhängt. Ein "Paar Ganzzahlen" ist ein Typ. Ein "Paar von ganzen Zahlen, wobei die zweite größer als die erste ist" ist aufgrund der Abhängigkeit von dem Wert ein abhängiger Typ.
glaube, ich habe eine Sprache, wo ich eine Zahl in einem Bereich darstellen kann:
struct Int<Min, Max>
beispielsweise der Typ Int<0, 10>
eine ganze Zahl zwischen 0 und einschließlich 10 exklusiv.
Als Bonus, nehme ich an generische Varianz vorstellen:
struct Int<in Min, out Max>
Zum Beispiel Instanzen von Typen wie Int<3, 10>
und Int<0, 8>
können Variablen von Int<0, 10>
Typ zugeordnet werden.
Int<Min1 + Min2, Max1 + Max2> operator+(Int<Min1, Max1> op1, Int<Min2, Max2> op2);
Also, das Hinzufügen eines Int<0, 10>
und ein erzeugen würde ein Ergebnis vom Typ Int<3, 14>
:
Nun ist die Additionsoperation auf diese Art eine Signatur wie diese haben könnte.
In einem solchen Typ-System, konnten wir auch bestellt haben Paare, wie zB:
struct OrderedPair<Min, Mid, Max>
{
Int<Min, Mid> SmallerNumber;
Int<Mid, Max> LargerNumber;
}
Und so weiter.
Ist das anders als abhängige Typisierung? Wenn das so ist, wie?
Ein abhängiger Typ ermöglicht es Ihnen, ein Prädikat an einen Typ anzuhängen und zu überprüfen, ob es in allen Operationen gültig ist. Wenn Sie Ihr System auf einige Prädikate beschränken können (z. B. min/max für einen Bereich), können Sie es zu einem gewissen Grad auslagern, um Parameter einzugeben. Haskell erlaubt das irgendwie, habe ich gehört. Das heißt, für einen praktischen Fall von Zahlen innerhalb eines Bereichs oder von Listen mit nicht mehr als N Elementen können Sie dies wahrscheinlich erreichen.Im Allgemeinen wahrscheinlich nicht, warum würden Menschen dann abhängig typisierte Sprachen erfinden? – 9000
@ 9000 Ja, ich versuche grundsätzlich zu verstehen, ob bestimmte Typen (wie diese "Int", eine mögliche "Liste ", sowie einige andere) grundsätzlich als Bausteine verwendet werden können, um zu einem Ganzen zu gelangen type System von abhängigen Typen, oder ein abhängiges System ist etwas ganz anderes. –