我是学生,在我的编程课程中,我们必须学习 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”必须以某种方式调用那个 delta 函数。但是我怎样才能访问一个集成在一个类型中的函数呢?