Synopse
Geben Sie Beispiele in einer beliebigen Sprache eines Typs an, der ganze Zahlen repräsentiert, ohne dabei direkt auf Maschinen-Ganzzahlen zurückzugreifen. Mappings einbeziehen zu y von den benutzerdefinierten Typ. Punkte für Effizienz in Raum und/oder Zeit.
Ursprüngliche Frage
In den Kommentaren von eine bestimmte, recht gewagte Antwort Auf eine Frage zur objektorientierten Programmierung habe ich meine Überzeugung geäußert, dass Maschinenprimitive keine Objekte sind, war aber nicht in der Lage, diese Behauptung wirklich zu untermauern, so wie der Verfasser dieser Antwort nicht in der Lage war, seine Behauptungen über die Universalität und die grundlegende Natur der objektorientierten Philosophie zu untermauern.
Das hat mich zum Nachdenken gebracht. Ist es in C++, einer Sprache, in der Maschinenprimitive nicht an der Klassenhierarchie beteiligt sind, möglich, einen Objekttyp zu definieren - sagen wir, Integer
-das tut nicht ein Maschinenprimitiv verwenden, um seinen Wert zu speichern?
Es gibt dieses schöne Stück Template-Hackerei die Kirchenziffern implementiert. Da die Konvertierung zwischen ganzen Zahlen und kirchlichen Ziffern ausschließlich zur Kompilierzeit erfolgt, gibt es leider keine Möglichkeit, die Verwendung von Ganzzahlen für Benutzereingaben zu umgehen.
Was ich also suche, ist eine Laufzeit Äquivalent zu den oben genannten, wenn auch nicht unbedingt unter Verwendung von Kirchennummern, mit vernünftigem Platzbedarf, das in einer Sprache wie C++ ohne Funktionen höherer Ordnung implementiert werden kann. Ich würde auch gerne Beispiele in anderen Sprachen sehen, insbesondere in solchen, die lustige dynamische Typisierungstricks verwenden. Zeiger und Funktionszeiger zählen nicht zu den Primitiven, solange die gespeicherte Adresse ausschließlich als solche und nicht für ihren ganzzahligen Wert verwendet wird.
Bonuspunkte für die Aufnahme aller ganzen Zahlen (d. h. nicht nur ganzer Zahlen) und Super-Bonuspunkte für die Entwicklung eines Systems, in dem auch Gleitkommazahlen implementiert werden können.
Um spätere Unannehmlichkeiten zu vermeiden und eine höfliche Diskussion zu fördern, mache ich diese Frage von Anfang an zu einer Community-Wikifrage.