Welcome to the CHICKEN Scheme pasting service
no title added by anonymous on Thu Aug 8 22:14:32 2013
(use srfi-1) (use extras) (use utils) (define vm (make-vector 500 0)) (define ptr 0) (define pc 0) (define (main) (let* ([port (open-input-file (last (argv)))] [data (read-all port)] [char (string-ref data pc)]) (cond [(char=? char #\>) (set! ptr (add1 ptr))] [(char=? char #\<) (set! ptr (sub1 ptr))] [(char=? char #\+) (vector-set! vm ptr (add1 (vector-ref vm ptr)))] [(char=? char #\-) (vector-set! vm ptr (sub1 (vector-ref vm ptr)))] [(char=? char #\.) (write-byte (vector-ref vm ptr))] [(char=? char #\,) (vector-set! vm ptr (read-byte))] [(char=? char #\[) (begin (if (= (vector-ref vm ptr) 0) (let* ([j 1] [loop (lambda () (cond [(char=? (string-ref data (add1 pc)) #\[) (set! j (add1 j))] [(char=? (string-ref data (add1 pc)) #\]) (set! j (sub1 j))]))]) (if (> j 0) (begin (loop) (set! pc (add1 pc)))))))] [(char=? char #\]) (begin (if (not (= (vector-ref vm ptr) 0)) (let* ([j -1] [loop (lambda () (cond [(char=? (string-ref data (sub1 pc)) #\[) (set! j (add1 j))] [(char=? (string-ref data (sub1 pc)) #\]) (set! j (sub1 j))]))]) (if (< j 0) (begin (loop) (set! pc (sub1 pc)))))))]) (set! pc (add1 pc)) (close-input-port port) (if (not (= (string-length data) pc)) (main)))) (main)