私は学生で、プログラミング コースでは Haskell を学ぶ必要があります。だから私はそれが初めてで、それほど多くの経験がありません。また、フォーラムに質問を投稿することに慣れていません。
そのため、まずライブラリを投稿します。一緒に作業する必要があります。(DA : 決定論的オートマトン)
type State = Integer
type DA = (State, State -> Char -> State, State -> Bool)
type ListDA = (State, [((State, Char), State)], [State])
a :: DA
a = (0, delta, (==1))
where
delta 0 'a' = 1
delta 1 'a' = 1
delta 2 'a' = 1
delta 0 'b' = 2
delta 1 'b' = 2
delta 2 'b' = 2
toDA :: ListDA -> DA
toDA (start, delta, final) = (start, deltaFun delta, (`elem` final))
where deltaFun dl = curry (fromMaybe 0 . flip lookup dl)
toDA 関数は、リスト表現でオートマトンを取得し、それをオートマトンに変換します。この機能とライブラリの残りの部分は、講義の議長によって与えられます。
問題は、型の関数を書くことです
advance :: DA -> State -> String -> State
この関数は、オートマトン、状態、および文字列を受け取り、文字列を読み取った後にオートマトンの状態を返します。
これまでのところ、アイデアは明確です。タイプ DA のオートマトンは、状態遷移関数デルタを持っています。したがって、関数「advance」は、何らかの方法でそのデルタ関数を呼び出す必要があります。しかし、型に統合された関数にアクセスするにはどうすればよいでしょうか?