2014-11-23 126 views
0

我在實施以下功能的困難:非詳盡模式在函數聲明

type Tabuleiro = [String] 
type Comandos = String 
type Comando = String 
type Coordenadas = String 

novaCoord :: Tabuleiro -> Comandos -> Coordenadas -> Coordenadas 

novaCoord l (cmd:xs) coor 
        | (c3 =="N") && cmd =='A' = [intToDigit(c1) , ' ',intToDigit(c2+1) , ' ',c3!!0] 
        | (c3 =="E") && cmd =='A' = [intToDigit(c1+1) , ' ',intToDigit(c2) , ' ',c3!!0] 
        | (c3 =="O") && cmd =='A' = [intToDigit(c1-1) , ' ',intToDigit(c2) , ' ',c3!!0] 
        | (c3 =="S") && cmd =='A' = [intToDigit(c1) , ' ',intToDigit(c2-1) , ' ',c3!!0] 
        | (c3 =="N") && cmd =='E' = [intToDigit(c1) , ' ',intToDigit(c2) , ' ',"O"!!0] 
        | (c3 =="E") && cmd =='E' = [intToDigit(c1) , ' ',intToDigit(c2) , ' ',"N"!!0] 
        | (c3 =="S") && cmd =='E' = [intToDigit(c1) , ' ',intToDigit(c2) , ' ',"E"!!0] 
        | (c3 =="O") && cmd =='E' = [intToDigit(c1) , ' ',intToDigit(c2) , ' ',"S"!!0] 
        | (c3 =="N") && cmd =='D' = [intToDigit(c1) , ' ',intToDigit(c2) , ' ',"E"!!0] 
        | (c3 =="E") && cmd =='D' = [intToDigit(c1) , ' ',intToDigit(c2) , ' ',"S"!!0] 
        | (c3 =="S") && cmd =='D' = [intToDigit(c1) , ' ',intToDigit(c2) , ' ',"O"!!0] 
        | (c3 =="O") && cmd =='D' = [intToDigit(c1) , ' ',intToDigit(c2) , ' ',"N"!!0] 
        | (c3 =="N") && cmd =='S' = [intToDigit(c1) , ' ',intToDigit(c2+1) , ' ',c3!!0] 
        | (c3 =="E") && cmd =='S' = [intToDigit(c1+1) , ' ',intToDigit(c2) , ' ',c3!!0] 
        | (c3 =="O") && cmd =='S' = [intToDigit(c1-1) , ' ',intToDigit(c2) , ' ',c3!!0] 
        | (c3 =="S") && cmd =='S' = [intToDigit(c1) , ' ',intToDigit(c2-1) , ' ',c3!!0] 


        where 
        ytotal=(length l)-1 
        coords=converte coor 
        (c1,c2,c3)=coords 
        y=l!!((ytotal)-(c2)) 
        x=y!!(c1) 

        converte :: Coordenadas -> (Int,Int,String) 
        converte [] = (0,0,"S") 
        converte (x:y:z) = 
            let 
            coords= words (x:y:z) 
            c = coords !! 2 
            a=read (coords !! 0) :: Int -- Coord X 
            b=read (coords !! 1) :: Int -- Coord Y 
            in (a,b,c) 

編譯器抱怨我沒有一個詳盡的模式。我已經嘗試過

novaCoord [] _ _ = ("0 0 S") 
novaCoord _ [] _ = ("0 0 S") 
novaCoord _ _ [] = ("0 0 S") 

但沒有運氣!我感謝任何可以提供的幫助,通用或不是!

+1

你也需要一個其他條款,並且converte不處理只有一個元素的列表。 – bheklilr 2014-11-23 00:31:46

+0

@bheklilr在我需要它的地方做了詭計!甚至沒有注意到,你可以回答,所以我可以選擇正確的。 – skills 2014-11-23 00:36:35

回答

3

你需要完成的模式匹配爲novaCoord _ [] _,你需要一個otherwise子句中的後衛novaCoord,你在where子句中錯過的情況下爲converte [x]novaCoord