From 11b5812975e6c05696ebac6d1c36ce93dc5d1cf7 Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Mon, 9 Dec 2019 13:17:33 -0800 Subject: [PATCH] Added comments for IntCode interpreter, esp. the code to do with states. --- src/IntCode.rkt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/IntCode.rkt b/src/IntCode.rkt index 3be83fd..1bf3e36 100644 --- a/src/IntCode.rkt +++ b/src/IntCode.rkt @@ -15,21 +15,31 @@ (define (program? p) (vectorof number?)) +;; state = +;; | out number (() -> state) +;; | in (number -> state) +;; | halt program (define-type state (out [value number?] [resume procedure?]) (in [resume procedure?]) (halt [program program?])) +;; resume-with-output : state -> (values number state) +;; Extract the output, then resume the program. (define (resume-with-output st) (type-case state st [out (value resume) (values value (resume))] [else (error "resume-with-output: Unexpected program state.")])) +;; resume-with-input : state -> number -> state +;; Resume the program with given input. (define (resume-with-input st input) (type-case state st [in (resume) (resume input)] [else (error "resume-with-input: Unexpected program state.")])) +;; resume-with-io : state -> (listof number) -> (listof number) +;; Run the program, providing input as needed, and collecting output. (define (resume-with-io st inputs) (type-case state st [in (resume) @@ -38,6 +48,8 @@ (cons value (resume-with-io (resume) inputs))] [halt (program) '()])) +;; halt-with-program : state -> program +;; Return program state of halted execution. (define (halt-with-program st) (type-case state st [halt (program) program]