sandbox/misc/turing.rkt

34 lines
944 B
Racket
Raw Normal View History

#lang racket
2018-04-10 14:09:04 +00:00
(define instruction
'(("B" "s1") . ("X" "R" "s2")))
2018-04-10 14:09:04 +00:00
;;; The tape utility functions should hide the actual tape
;;; representation.
(define (tape-lookup tape position)
(unless (hash-has-key? tape position)
2018-04-10 14:09:04 +00:00
(hash-set! tape position "B"))
(hash-ref tape position))
2018-04-10 14:09:04 +00:00
(define (tape-write tape position sym)
(hash-set! tape position sym))
(define (head-update head head_dir)
(cond
[(equal? head_dir "R") (+ head 1)]
[(equal? head_dir "L") (- head 1)]
[else (error "invalid head direction")]))
(define (turing-update tape head state instruction)
(tape-write tape head (car instruction))
(values tape
(head-update head (car (cdr instruction)))
(car (cdr (cdr instruction)))))
(define (turing-instruction tape instructions)
(for (instruction instructions)
;; does the car match the tape and the head position?
;; if it does, break the loop and return the instruction
;; keep going
))