有没有办法通过其中一个属性找到给定的“对象”? 我尝试过模式匹配,就像我在逻辑编程中所做的那样,但我无法弄清楚:
data Object = Object {
_prop1 :: type,
_prop2 :: color,
_prop3 :: pos
} deriving Eq
type Square = Maybe Object
type Board = [[Square]]
objectlist::Board
objectlist = [[ Just (Object type color pos), Just (Object type color pos)]
...
[ Just (Object type color pos), Just (Object type color pos)]
index_of :: (Int, Int)->Int
index_of (x,y) = fromJust $ elemIndex piece objectlist
where
piece = Piece _ _ (x,y)
另外,我认为我找到索引的方法并不好。我用一个简单的列表使用它,但无法找到如何使用2 dim列表。
答案 0 :(得分:1)
您可以使用findIndex
获得某种效果。
index_of :: (Int, Int)->Int
index_of (x,y) = fromJust $ findIndex piece objectlist
where
piece (Piece _ _ pos) = pos == (x,y)
答案 1 :(得分:1)
正如您在另一个answer中所说的那样,您正在寻找2D列表中的索引。因此,我认为index_of
的类型应为(Int, Int) -> (Int, Int)
。
在另一个答案中建议使用findIndex
函数来帮助您index_of
。你需要的是它的通用2D版本。您可以通过以下方式实施findIndex2D
:
import Data.List
import Data.Maybe
findIndex2D :: (a -> Bool) -> [[a]] -> Maybe (Int, Int)
findIndex2D pred xs = do
let maybeIndices = map (findIndex pred) xs
y <- findIndex isJust maybeIndices
x <- maybeIndices !! y
return (x, y)