0

わかりました、私は 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 です。探している要素の位置を取得したら、それをどの要素が囲んでいるかを把握する方法を、一生理解できません。

これが最も明確な質問ではない場合は申し訳ありません。何か見逃した場合は、さらに詳しく説明できます。

4

1 に答える 1