Я совершенно новичок в Haskell. Мой java ноу-хау мне мало помогает.
Мне нужна помощь или руководство по завершению кода. Я попробовал большинство частей, а также указал комментарии о том, чего я стремлюсь достичь.
DFA определяется следующим образом (исходное изображение определения DFA):
Q = {q1,q2,q3,q4,q5}
qs = q1
F = {q4}
delta = {
<q1,0,q2>,<q1,1,q2>,<q1,.,q3>,
<q2,0,q2>,<q2,1,q2>,<q2,.,q4>,
<q3,0,q4>,<q3,1,q4>,<q3,.,q5>,
<q4,0,q4>,<q4,1,q4>,<q4,.,q5>,
<q5,0,q5>,<q5,1,q5>,<q5,.,q5>
}
Sigma = {0,1,.}
задача:
Создайте программу на языке Haskell, которую можно использовать для выполнения любого произвольного детерминированного конечного автомата, соответствующего приведенному выше определению FDA. Представьте DFA в виде четырех кортежей
а. представить каждое состояние с его именем в виде строки
б. представляет все состояния в виде списка состояний
в. представить каждый переход в виде трех кортежей и список переходов в виде списка.
Чтобы помочь вам, реализуйте следующие функции в своем решении:
а. stateFactory — возвращает определение DFA (т. е. четыре кортежа)
б. allStates, firstState, finalStates и allTransitions — берут DFA и возвращают соответствующий компонент DFA. Например, в приведенном выше экземпляре DFA allStates вернет список состояний q₁, q₂, q₃, q₄ и q₅.
в. transFrom, transInput и transTo — взять переход и вернуть соответствующий компонент перехода
д. findTransition — принимает состояние, метку и список переходов и возвращает список, содержащий одиночный переход, соответствующий заданному состоянию и символу (обратите внимание, что переходы, исходящие из состояния, однозначно определяются меткой каждого символа).
е. findNextState — принимает DFA, метку и состояние и возвращает состояние.
ф. dfaAccept — принимает DFA и входную строку и возвращает True, если DFA принимает ввод, и False в противном случае (т. е. разлагает строку по одному символу за раз, не сопоставляя всю строку, поскольку ваше решение должно работать для любого DFA). Полезно разделить это на две функции, каждая с разными наборами параметров (одна для пустого списка и одна для непустого списка). Одна функция принимает текущее состояние, а другая просто принимает DFA, состояние которого считается начальным состоянием DFA.
это мой код имеет много ошибок, но я пытаюсь их исправить
allStates = ["q1","q2","q3","q4","q5"] -- iniitialize all states
firstState = "q1"
finalStates = "q4"
--define all transitions as a tuple
t1 = ("q1",'0',"q2")
t2 = ("q1",'1',"q2")
t3 = ("q1",'.',"q3")
-- place all transitions in a list
allTransitions = [t1,t2,t3]
lst =[]
stateFactory = (allStates, firstState, finalStates, allTransitions)
findTransition state label listOfTransition =
if (state , label , "q1") elem listOfTransition
then lst ++ [] -- if the tuple matches the one in transition add to list
else
lst -- no match dont add
if (state , label , "q2") elem listOfTransition
then lst ++ [] -- if the tuple matches the one in transition add to list
else
lst -- no match dont add
if (state , label , "q3") elem listOfTransition
then lst ++ [] -- if the tuple matches the one in transition add to list
else
lst -- no match dont add
findNextState DFA label state =
--get the transition and extract the last element which is the state
last findTransition state label allTransitions
dfaAccept DFA inputString =
if inputString == null then False
ожидаемый результат
Prelude> dfaAccept stateFactory “”
False
Prelude> dfaAccept stateFactory “1”
False
Prelude> dfaAccept stateFactory “1.0”
True
Prelude> dfaAccept stateFactory “11.11”
True
Prelude> dfaAccept stateFactory “10.10.10”
False
lst = []
и позжеlst []
, что вы пытаетесь сделать? - person Willem Van Onsem   schedule 19.02.2018