6

私の質問の要点は、移動のリストに従って遷移する決定論的状態オートマトンがあり、この一連の遷移を別の関数の「計算コンテキスト」として機能させたいということです。この別の関数は、遷移ごとにステート マシンを監視し、それを使用して何らかの計算を行います。これはモデル ビュー パターンを漠然と連想させます。自明なことですが、この他の関数は、単にマシンの現在の状態を読み取り、それを画面に出力するだけかもしれません。

ステートマシンの私の実装:

data FA n s = FA { initSt1 :: n, endSt1 :: [n], trans1 :: n -> s -> n }

-- | Checks if sequence of transitions arrives at terminal nodes
evalFA :: Eq n => FA n s -> [s] -> Bool
evalFA fa@(FA _ sfs _ ) = (`elem` sfs) . (runFA fa)

-- | Outputs final state reached by sequence of transitons
runFA :: FA n s -> [s] -> n
runFA (FA s0 sfs trans) = foldl trans s0

そして例:

type State = String
data Trans = A | B | C | D | E

fa :: FA State Trans
fa = FA ("S1") ["S4","S5"] t1

-- | Note non-matched transitions automatically goes to s0
t1 :: State -> Trans -> State
t1 "S1" E = "S1"
t1 "S1" A = "S2"
t1 "S2" B = "S3"
t1 "S2" C = "S4"
t1 "S3" D = "S5"
t1 _  _   = "S1"

runFA fa [A,B]   -- | S3
4

1 に答える 1