2013-04-17 266 views
1

遇到了麻烦,从一个辅助功能输出到我的函数的输出相匹配,我用下面的代码我:Haskell-类型匹配

getSemiDiag :: [[Maybe Player]] -> Int -> Int -> [Maybe Player] 
getSemiDiag [] _ _ = [] 
getSemiDiag (x:xs) start size = if start > (size -1) 
          then [] 
          else (x !! start) : (getSemiDiag xs (start+1) size) 



semiRight :: [[Maybe Player]] -> Int -> Int -> [[Maybe Player]] 
semiRight [] _ _ = [] 
semiRight (x:xs) start size = if start > (size -1) 
          then [] 
          else (getSemiDiag x start size) : (semiRight xs (start+1) size) 

功能semiRight不会,尽管我尽了最大努力匹配。有什么想法吗?

+3

我不知道你想达到什么,但你传递一个'[也许播放器]''到哪里getSemiDiag'一个期望了' [[也许玩家]]'。你的意思是让'getSemiDiag(x:xs)开始大小:semiRight xs(start + 1)size'? –

+3

'然后[]'应该可以'然后[[]]' – Wes

+0

谢谢! – lopezrican304

回答

1

仅从类型来看,x被匹配到具有类型的[Maybe Player]一个元件,

你应该明显通过[X]但不x到getSemiDiag。此外,一些括号是多余的。

semiRight :: [[Maybe Player]] -> Int -> Int -> [[Maybe Player]] 
semiRight [] _ _ = [] 
semiRight (x:xs) start size = if start > (size -1) 
          then [] 
          else getSemiDiag [x] start size : semiRight xs (start+1) size 

为什么不直接使用zipWith