2014-01-19 43 views
0

任何人都可以使用這個函數嗎?與Haskell中的列表衝突

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

@GaneshSittampalam我已經編輯了! – user2876457

+0

你知道'Maybe' monad嗎? - 在這種情況下,它通常用在haskell-land中以避免像'-1'這樣的魔法值。 – epsilonhalbe

回答

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 
+0

非常感謝,我現在明白了 – user2876457

0

只是爲了好玩 - 一個襯墊

getCell l i j = (((l ++ repeat []) !! i) ++ repeat (-1)) !! j