私はこれらの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です。
誰かが私を助けることができますか?