Another kind of pointer arithmetic
Ianis Vasilev
ianis at ivasilev.net
Sat Jun 27 23:16:37 UTC 2020
On Saturday, 27 June 2020 at 20:03:30 UTC, Superstar64 wrote:
> On Friday, 26 June 2020 at 14:00:27 UTC, Ianis Vasilev wrote:
>> Somebody joked yesterday on Twitter about how pointer levels
>> of indirection can be used to represent natural numbers and
>> how we can do arithmetic with them (I can't find the post
>> right now).
>>
>> I decided to try and implement adding and multiplying levels
>> of indirection:
>> https://gist.github.com/v--/5cbd0046be6fc5dbff9a9ad2f1717cde
>>
>> I think it turned out fairly trivial.
>
> This appears to be a form of peano numbers. See
> https://wiki.haskell.org/Peano_numbers
Yes, the whole point was implementing the corresponding semigroup
operations.
The nice thing is that D templates allow mapping combinations of
types and values to other types and values, which allows for a
lot of flexibility (this is not specific to D, but it is nice
nonetheless). For example, the defined templates can be viewed as
mappings (or morphisms, or whatever) with the following
signatures:
IndirectionCounter: Types -> Values
Add: Types × Types -> Types
Mul: Types × Types -> Types
You can map types to values via IndirectionCounter, but you can
also create types from values by implementing the inverse of the
IndirectionCounter template.
I remember somebody talking about compile-time metaclasses some
time ago, however I think that the type system is rich enough as
it is right now.
More information about the Digitalmars-d
mailing list