scanl (\exp y -> scanl (\x -> if (isLetter x) then update exp (Literal x) "" else
if x=='+' then update exp Epsilon "+" else
if x=='*' then update exp Epsilon "*" else
update exp Epsilon "|") y) Epsilon q
У меня есть список [Char], и я хочу преобразовать их в свой тип данных, но у меня возникают некоторые проблемы с ним. У меня есть somenthing, как это ["a + b", "c * d"], и я хочу получить результат, когда я применяю scanl на "a + b" , чтобы оставаться таким, чтобы я мог использовать его для второго списка. Кто-нибудь может мне помочь ?Scanl in Haskell
Мой тип данных:
data Reg = Epsilon | Literal Char | Or Reg Reg | Then Reg Reg | Star Reg deriving Eq
и
update:: Reg -> Reg -> [Char] -> Reg
update a b "" = (a `Then` b)
update a b "|"= (a `Or` b)
update a b "*" = (Star a)
update a b "+" = (plus a)
update a b "?" = (opt a)
И я пытаюсь что-то преобразование, как это [ "а |", "Ьс"] к (Тогда (Или до н.э.))
Можете ли вы дать немного больше контекста о большой картине? Что такое 'Literal' и' Epsilon'? Что делает 'update'? Что вы пытаетесь достичь в целом? – AndrewC
@AndrewC Это, казалось бы, идеализированный NFA. Я не знаю, что должно делать выражение 'scanl', но тип Reg явно соответствует недетерминированным регулярным выражениям. – Carl
@Carl Это видно из редактирования Edy, сделанного после моего комментария, да. – AndrewC