Execute Brain****: Difference between revisions

m
size, typo
m (readability)
m (size, typo)
Line 2,100:
(stack (make-vector stack-length 0))
(stack-pointer 0))
 
(letrec ((skip (lambda (PC sp)
(let loop ((pc PC) (sp sp))
(iflet (eq?(ch (string-ref program pc) #\[)
(skippc (+ pc 1) sp))
(if (eq? (string-ref program pc)case #\])ch
(list#\] (+list pc 1) sp))
(#\[ (apply loop (+skip pc 1)))sp)))
(#\<else
(loop (+ pc 1) sp)))))))
(step (lambda (PC SP)
(let loop ((pc PC) (sp SP))
(iflet (eq?(ch (string-ref program pc) #\[)
(if (eq?pc (vector-ref+ stackpc sp1)) 0)
(apply loop (skip (+ pc 1)case sp))ch
(apply#\] loop (steplist (+- pcPC 1) sp))))
(#\[ (if (displayeq? (makevector-string 1 (ref stack sp)) 0)
(if (eq? (string-refapply programloop (skip pc) #\]sp))
(list (-apply PCloop 1)(step pc sp))))
(case#\+ (stringset-ref! stack sp (+ (ref stack programsp) pc1))
(#\+loop pc sp))
(#\- (set-ref! stack sp (+- (ref stack sp) 1))
(loop (+ pc 1) sp))
(#\-> (loop pc (+ sp 1)))
(#\< (set-ref!loop stack sppc (- (ref stack sp) 1)))
(#\. (loopdisplay (+ pcmake-string 1) (ref stack sp)))
(#\>loop pc sp))
(loop (+ pc 1) (+ sp 1)))
(#\<
(loop (+ pc 1) (- sp 1)))
(#\.
(display (make-string 1 (ref stack sp)))
(loop (+ pc 1) sp))
(else
(loop (+ pc 1) sp))))))))
(step 0 0))))
 
Line 2,138 ⟶ 2,133:
; (bf ",++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>." 30000)
; ==> Hello World!
; (bf ">>++++[<++++[<++++>-]>-]<<.[-]++++++++++." 30000)
; ==> @
</lang>