Added comments for IntCode interpreter, esp. the code to do with states.
This commit is contained in:
parent
53da35fdac
commit
11b5812975
|
@ -15,21 +15,31 @@
|
||||||
(define (program? p)
|
(define (program? p)
|
||||||
(vectorof number?))
|
(vectorof number?))
|
||||||
|
|
||||||
|
;; state =
|
||||||
|
;; | out number (() -> state)
|
||||||
|
;; | in (number -> state)
|
||||||
|
;; | halt program
|
||||||
(define-type state
|
(define-type state
|
||||||
(out [value number?] [resume procedure?])
|
(out [value number?] [resume procedure?])
|
||||||
(in [resume procedure?])
|
(in [resume procedure?])
|
||||||
(halt [program program?]))
|
(halt [program program?]))
|
||||||
|
|
||||||
|
;; resume-with-output : state -> (values number state)
|
||||||
|
;; Extract the output, then resume the program.
|
||||||
(define (resume-with-output st)
|
(define (resume-with-output st)
|
||||||
(type-case state st
|
(type-case state st
|
||||||
[out (value resume) (values value (resume))]
|
[out (value resume) (values value (resume))]
|
||||||
[else (error "resume-with-output: Unexpected program state.")]))
|
[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)
|
(define (resume-with-input st input)
|
||||||
(type-case state st
|
(type-case state st
|
||||||
[in (resume) (resume input)]
|
[in (resume) (resume input)]
|
||||||
[else (error "resume-with-input: Unexpected program state.")]))
|
[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)
|
(define (resume-with-io st inputs)
|
||||||
(type-case state st
|
(type-case state st
|
||||||
[in (resume)
|
[in (resume)
|
||||||
|
@ -38,6 +48,8 @@
|
||||||
(cons value (resume-with-io (resume) inputs))]
|
(cons value (resume-with-io (resume) inputs))]
|
||||||
[halt (program) '()]))
|
[halt (program) '()]))
|
||||||
|
|
||||||
|
;; halt-with-program : state -> program
|
||||||
|
;; Return program state of halted execution.
|
||||||
(define (halt-with-program st)
|
(define (halt-with-program st)
|
||||||
(type-case state st
|
(type-case state st
|
||||||
[halt (program) program]
|
[halt (program) program]
|
||||||
|
|
Loading…
Reference in New Issue