わかりました、私は Haskell に慣れていないので、問題に対する関数型アプローチについて頭を悩ませるのに助けが必要です。
私はリストのリストを持っています。より具体的には[[Char]]
。
リスト内の特定の要素をターゲットにして、その要素の上、下、左右の要素を調べたいと思います。
例えば:
["-------",
"-------",
"---N---",
"--WOE--",
"---S---",
"-------",
"-------"]
O
私がターゲットにしている要素はどこにあり、N,S,E,W
要素を直接囲む要素O
です。
(x,y)
要素の座標を取得する関数を作成しましたO
。次のようになります。
find :: Eq a => [[a]] -> a -> (Int,Int)
find [[]] _ = (-1,-1)
find (x:xs) el = findHelper (x:xs) (0,0,el)
findHelper :: Eq a => [[a]] -> (Int,Int,a) -> (Int,Int)
findHelper [[]] _ = (-1,-1)
findHelper (x:xs) (row,col,el)
| x == [] = findHelper xs (row+1,0,el)
| (head x) == el = (row,col)
| otherwise = findHelper ((tail x) : xs) (row,col + 1,el)
この(x,y)
座標系のインデックスは 0 です。探している要素の位置を取得したら、それをどの要素が囲んでいるかを把握する方法を、一生理解できません。
これが最も明確な質問ではない場合は申し訳ありません。何か見逃した場合は、さらに詳しく説明できます。