#lang plait (require (typed-in racket/base [quotient : (Number Number -> Number)])) (define NUMBER-TAG 2) ; 10 binary (define STRING-TAG 1) ; 01 binary (define (ref->tag ref) (modulo ref 4)) (define (ref->word loc) (quotient loc 4)) (define (tag-word word tag) (+ tag (* 4 word))) (let ([str-ref (tag-word 0 STRING-TAG)] [num-ref (tag-word 7 NUMBER-TAG)]) (begin (test (ref->tag str-ref) STRING-TAG) (test (ref->word str-ref) 0) (test (ref->tag num-ref) NUMBER-TAG) (test (ref->word num-ref) 7)))