2013-04-17 3 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) start size: semiRight xs (start + 1) size'? –

+3

'then []' должно быть, должно быть 'then [[]]' – Wes

+0

спасибо, что это было! – lopezrican304

ответ

1

Судя только по типу, x сопоставляется элементу, который имеет тип [Maybe Player],

вы должны явно передать [х], но не х до 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

Смежные вопросы