#lang plait (require (typed-in racket/base [char->integer : (Char -> Number)] [integer->char : (Number -> Char)] [number->string : (Number -> String)] [vector->list : ((Vectorof Number) -> (Listof Number))]) (typed-in racket/vector [vector-copy : ((Vectorof Number) Number Number -> (Vectorof Number))])) (define MEMORY (make-vector 100 -1)) (define next-addr 0) (define (reset) (set! next-addr 0)) (define (write-and-bump v) (let ([n next-addr]) (begin (vector-set! MEMORY n v) (set! next-addr (add1 next-addr)) n))) (define (store-num n) (write-and-bump n)) (define (read-num a) (vector-ref MEMORY a)) (define (store-str s) (let ([a0 (write-and-bump (string-length s))]) (begin (map write-and-bump (map char->integer (string->list s))) a0))) (test (begin (reset) (store-str "hello") (vector-copy MEMORY 0 6)) '#(5 104 101 108 108 111))