有人可以帮我这个功能吗?
getCell :: [[Int]] -> Int -> Int -> Int
其中m i j是行列表和列表列m的列。 索引从零开始,每行的大小相同。 如果i或j无效,则该函数应返回-1。
我正在考试Haskell,尽管事实上这可能会出现,我仍然想知道我该怎么做,而且因为我从未使用过Haskell中的列表列表,所以我没有想法如何开始解决这个问题。你能帮我个忙吗?
这是我到目前为止所做的:
getCell :: [[Int]] -> Int -> Int -> Int
getCell [] _ _ = "the list is empty!"
getCell zs x y =
if x > length zs || y > length (z:zs) then -1 else
let row = [x| x == !! head z <- zs]
column = ...
我不知道如何找到行和列
答案 0 :(得分:2)
这应该可以使用(!!)
运算符。首先检查索引是否在列表中,然后使用(!!)
访问该索引处的元素。
getCell m i j = if i >= length m then -1
else let
m0 = m !! i
in if j >= length m0 then -1
else m0 !! j
答案 1 :(得分:0)
只是为了好玩 - 一个班轮
getCell l i j = (((l ++ repeat []) !! i) ++ repeat (-1)) !! j