[英]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.