簡體   English   中英

Scank in Haskell

[英]Scanl in Haskell

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的結果,以便可以將其用於第二個列表。 有人能幫我嗎 ?

我的數據類型是:

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))

作為記錄, scanl不太scanl傳遞狀態,尤其是在這里,您根本不希望結果成為列表,而只是最終結果。 更通用的方法是使用fold

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM