2016-06-26 21 views
1

Ich konnte keine spezifischen Informationen in der Bedienungsanleitung finden. kann jemand klären, wie sich ANY, NONE und Typ-Einheit in Nim widerspiegeln?ANY, NONE und Unit in Nim

kurze Definitionen - Ein Einheitentyp ist ein Typ, der nur einen Wert zulässt (und daher keine Informationen enthalten kann). Der Träger (unterliegende Menge), der einem Einheitentyp zugeordnet ist, kann ein beliebiger Singleton-Satz sein. Es gibt einen Isomorphismus zwischen zwei solchen Mengen, daher ist es üblich, über den Einheitentyp zu sprechen und die Details seines Wertes zu ignorieren. Man kann auch den Einheitstyp als die Art von 0-Tupeln betrachten, d. H. Das Produkt ohne Typen.

ANY - Typ ANY auch bekannt als ALL oder Top, ist der universelle Satz. (alle möglichen Werte).

Nichts die "leere Menge"

es Ihnen danken!

+1

Könnten Sie klarstellen, was Sie mit * ANY *, * NONE * (wahrscheinlich 'nil') und * type unit * meinen? Haben Sie die Beschreibung des Tags 'any' gelesen? Es scheint nichts mit deiner Frage zu tun zu haben. Um eine richtige Antwort zu erhalten, sollten Sie das Problem beschreiben, das Sie lösen möchten. – flyx

+0

hinzugefügt Definitionen – BeH

Antwort

2

Ihre Frage scheint über Sätze zu sein. Lassen Sie uns einen Blick:

let emptySet: set[int8] = {} 

Dies ist eine leere Menge des Typs int8. Das {} Literal für den leeren Satz wird implizit in jeden tatsächlichen set Typ gegossen.

let singletonSet = {1'i8} 

Dies ist ein Satz genau ein Wert (ein Einheitentyp, wenn ich es richtig verstehe) enthält. Der Typ des Satzes kann nun automatisch aus dem Typ des einzelnen Wertes abgeleitet werden.

let completeSet = {low(int8) .. high(int8)} 

Dieser Satz enthält alle möglichen int8 Werte.

Der eingebaute set Typ ist als Bitvektor implementiert und kann daher nur für Werttypen verwendet werden, die nur einen kleinen Satz möglicher Werte enthalten (für int8 ist der Bitvektor bereits 256 Bit lang). Neben int8 wird es normalerweise für char und Aufzählungstypen verwendet.

Dann gibt es HashSet von der module sets, die größere Typen aufnehmen kann. Wenn Sie jedoch einen HashSet erstellen, der alle möglichen Werte enthält, ist der Speicherverbrauch wahrscheinlich enorm.

0

Nim ist keine funktionale Sprache und behauptet niemals, eine zu sein. Es gibt kein Äquivalent dieser Typen, und die Lösung ähnelt eher der Straße, die C++ benötigt.

Es gibt Leere, die der Einheit am nächsten ist. Der Any-Typ existiert nicht, aber es gibt den untypisierten pointer. Aber dieser Typ enthält keine Art von Information darin, also müssen Sie wissen, auf was Sie ihn werfen können. Und für NONE oder Nothing, wie ich es von Scala kenne, musst du auch void verwenden. Aber hier können Sie das noReturn Pragma hinzufügen.