奥様は仕事だし自転車にのる気力もない日曜なので、有限状態機械ごっこをしてひまをつぶす。とはいえ、遷移図を睨んでいても頭が弱くてちっとも理解がすすまないので、有限状態機械の動作を模倣する評価機をSICPの第4章を参考にしてつくってみよう。ザ 本末転倒。
(define (q0 input)q0とq1は、いわゆる遅延機械。
(cond ((= input 0)
(output 0)
(transit! q0))
((= input 1)
(output 0)
(transit! q1))))
(define (q1 input)
(cond ((= input 0)
(output 1)
(transit! q0))
((= input 1)
(output 1)
(transit! q1))))
(define (output b)
(display #`"Output: ,b"))
(define (eval-in-current-state input state)
(state input))
(define current-state q0)
(define (transit! q) (set! current-state q))
(define (fsm-loop)
(newline)
(let ((input (read)))
(let* ((state current-state)
(output (eval-in-current-state input state)))))
(fsm-loop))
gosh>
(fsm-loop)
1
Output: 0
1
Output: 1
1
Output: 1
1
Output: 1
1
Output: 1
0
Output: 1
0
Output: 0
0
Output: 0
0
Output: 0
1
Output: 0
1
Output: 1
0
Output: 1
1
Output: 0
……
0 件のコメント:
コメントを投稿