Синопсис
Размещайте примеры на любом языке типа, представляющего целые числа, без непосредственного использования машинных целых чисел. Включите сопоставления до и от пользовательского типа. Очки за эффективность в пространстве и / или времени.
Оригинальный вопрос
В комментариях некоего довольно смелого ответа на вопрос об объектно-ориентированном программировании я высказал свое убеждение, что машинные примитивы не являются объектами, но не смог реально обосновать это утверждение в том же духе. таким образом, что автор этого ответа не смог обосновать свои утверждения об универсальности и фундаментальной природе объектно-ориентированной философии.
Так что это заставило меня задуматься. В C ++, языке, в котором машинные примитивы не участвуют в иерархии классов, возможно ли определить тип объекта - скажем, Integer
-, который не использует машинный примитив для хранения его значение?
Существует этот красивый бит шаблона хакерства , который реализует церковные цифры. К сожалению, поскольку преобразование между целыми числами и церковными числами происходит строго во время компиляции, невозможно использовать машинные целые числа, скажем, для пользовательского ввода.
Итак, я ищу время выполнения эквивалент вышеупомянутого, хотя и не обязательно с использованием церковных чисел, с разумными требованиями к пространству, которое может быть реализовано на языке, таком как C ++, без высшего порядка функции. Я также хотел бы видеть примеры на других языках, особенно на тех, которые используют забавные приемы динамической типизации. Указатели и указатели функций не должны учитываться как примитивы, если сохраненный адрес используется строго как таковой, а не как его целое значение.
Бонусные баллы за размещение всех целых чисел (то есть не только целых чисел), и супер бонусные баллы за разработку системы, в которой также могут быть реализованы числа с плавающей запятой.
Чтобы избежать неприятностей и поощрить вежливое обсуждение, я делаю этот вопрос вики-сообщества с самого начала.