2007/01/14

ついに歯ぐきに穴をあけてインプラントの支柱を埋め込んだ。抜歯は来週。しばらくまともなものが食べられないうえに感染症予防のための抗生剤でぼうっとする。でも明日は出社か。はたらきたくないよう。

奥様は仕事だし自転車にのる気力もない日曜なので、有限状態機械ごっこをしてひまをつぶす。とはいえ、遷移図を睨んでいても頭が弱くてちっとも理解がすすまないので、有限状態機械の動作を模倣する評価機をSICPの第4章を参考にしてつくってみよう。ザ 本末転倒。
(define (q0 input)
(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))
q0とq1は、いわゆる遅延機械。
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 件のコメント: