2013-04-23 92 views
0

我有這兩個列表[@,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

有人可以幫助我嗎?

+0

一個(未使用)值添加到第一列表的開始,然後用zipWith – Arjan 2013-04-23 20:37:26

+0

你想要什麼當第二個列表中的元素是''「'時發生?當第二個列表的第一個元素不是'「」'時,你想要發生什麼?當你給出的兩個清單是輸入時,結果應該是什麼? (我認爲這是一個清單,但向我們顯示清單。) – dave4420 2013-04-23 20:42:32

+3

P.S.你的第一個列表不是有效的Haskell列表。如果你不構成對Haskell的擴展,我們會更容易幫助你。 – dave4420 2013-04-23 20:44:05

回答

0

我想你想要像

combinedList = zip secondList (Epsilon : firstList) 

然後查找 「?」你只需要做lookup "?" combinedList並得到Just (Literal 'c')

(你可以明顯地試圖抓住了指數,但它似乎對這裏所描述的情況有點迂迴。)