Rolf B: Informatik zum Dienstag

Beitrag lesen

Hallo 1unitedpower,

by the way braucht man binaryLength gar nicht. Das verleitet nur zum cheaten. Man muss nur binaryToNumber etwas umgestalten:

function binaryToNumber(n : BNat) : number {
  return b2n(0, n);

  function b2n(val: number, n: BNat) : number {
    if (n.tag === 'zero') return val;
    return b2n(2*val + (n.tag === 'B1' ? 1 : 0), n.pred);
  }
}

Die Abfrage n.tag === 'zero' statt n === zero hilft TypeScript bei der korrekten Typdiskriminierung. Ich könnte sonst n.pred nicht verwenden.

Warum hast Du eigentlich Zero, U0, B0 und B1 als interface definiert und nicht als type? Ich habe ja von TypeScript fast gar keine Ahnung...

Rolf

--
sumpsi - posui - obstruxi