In Ocaml haben Tupel mit unterschiedlichen Aritäten verschiedene Typ- und Wertekonstruktoren:
%Vor%Beachten Sie, dass das zweite Beispiel (b) flexibler ist als das erste (a), da "tail" von b - (2, 3) - selbst ein gültiger Wert ist:
%Vor%Was ist der Grund, nicht "(1, 2, 3)" als "(1, (2, 3))" zu analysieren und statt dessen eine unendliche (oder, schlimmer noch, endliche) Menge neuer Typ- und Wertkonstruktoren einzuführen für verschiedene Artigkeiten?
Was ist der Grund, nicht "(1, 2, 3)" als "(1, (2, 3))" zu analysieren und statt dessen eine unendliche (oder, schlimmer noch, endliche) Menge neuer Typ- und Wertkonstruktoren einzuführen für verschiedene Artigkeiten?
Das ML-Typ-System wurde im Streben nach einer stärkeren statischen Typprüfung entworfen, um so viele Fehler wie möglich während der Kompilierungszeit zu erfassen.
Ihr Vorschlag würde das Typsystem erheblich schwächen, weil es nicht mehr zwischen (1, 2, 3)
und (1, (2, 3))
unterscheiden könnte, was eine Bewegung in die entgegengesetzte Richtung ist.
In der Praxis kann ich Ihnen sagen, dass ML, die solche Unterscheidungen getroffen hat, in der Vergangenheit zu echten Fehlern in meinem Produktionscode gekommen ist. Ich schätze das ML-Design in diesem Zusammenhang.