我有这两个列表[@,a,@,b,c,@,@,@,(de),@,@,@,f,g,@,h]
和["","","+","","","?","|","","","","","*","","","|",""]
我想用scanl or map
函数来覆盖第二个列表,并且在第一个列表中提取前面的元素。 2个列表具有不同类型的元素。haskell中的一个元素的索引
例如我想如果在第二列表中的元件是/= ""
然后在第一列表中(例如,用于为+
获得a
,对于? -> c
,*->(de)
|->g
)提取元件后面。
我想是这样的
map(\x-> if x /= "" then l2 !! (((elemIndices x l1)!!0)-1) else Epsilon)l1
其中l1 is ["","","+","","","?","|","","","","","*","","","|",""]
和l2 is [@,a,@,b,c,@,@,@,(de),@,@,@,f,g,@,h]
但它简化版,工作,也@ = Epsilon
,它是从data Reg = Epsilon | Literal Char | Or Reg Reg | Then Reg Reg | Star Reg deriving Eq
。
有人可以帮助我吗?
一个(未使用)值添加到第一列表的开始,然后用zipWith – Arjan 2013-04-23 20:37:26
你想要什么当第二个列表中的元素是''“'时发生?当第二个列表的第一个元素不是'“”'时,你想要发生什么?当你给出的两个清单是输入时,结果应该是什么? (我认为这是一个清单,但向我们显示清单。) – dave4420 2013-04-23 20:42:32
P.S.你的第一个列表不是有效的Haskell列表。如果你不构成对Haskell的扩展,我们会更容易帮助你。 – dave4420 2013-04-23 20:44:05