0
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] のリストがあり、それらを自分のデータ型に変換したいのですが、いくつか問題があります。私はこの ["a+b","c*d"] のようなものを持っていて、"a+b" に scanl を適用したときの結果を残しておきたいので、2 番目のリストに使用できます。誰かが私を助けることができますか?

私のデータ型は次のとおりです。

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)  

そして、私はこの ["a|","bc"] のようなものを (Then a (Or bc)) に変換しようとしています

4

1 に答える 1