私はこれらの2つのリストを持っており[@,a,@,b,c,@,@,@,(de),@,@,@,f,g,@,h]
、関数を["","","+","","","?","|","","","","","*","","","|",""]
使用しscanl or map
て2番目のリストをカバーし、最初のリストでその前にある要素を抽出したいと考えています。2 つのリストには、異なるタイプの要素があります。
たとえば、2 番目のリスト/= ""
の要素が、最初のリストでその背後にある要素を抽出する場合 (たとえば、 for+
を取得するためa
、 for を取得する? -> 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
です。
誰かが私を助けることができますか?