-2
任何人都可以幫助我理解爲什麼我得到這個錯誤? tar2.hs:40:41:錯誤:輸入「C」解析錯誤Haskell - >在'哪裏'解析錯誤
我試圖移動在那裏,但我得到了同樣的錯誤......
函數「avancar」接收位置和方向,並給出了新的位置,按照同方向
type Caminho = [Passo]
data Passo
= Avanca
| Sobe
| Desce
| CurvaEsq
| CurvaDir
deriving (Eq,Read,Show)
data Mapa = Mapa (Posicao,Orientacao) Tabuleiro
deriving (Eq,Read,Show)
type Tabuleiro = [[Peca]]
data Peca = Peca Tipo Altura
deriving (Eq,Read,Show)
data Tipo = Rampa Orientacao | Curva Orientacao | Recta | Lava
deriving (Eq,Read,Show)
type Posicao = (Int,Int)
type Dimensao = (Int,Int)
type Altura = Int
posi :: Tabuleiro -> Posicao -> Orientacao -> Peca
posi t (x,y) orientacao = (t !! y) !! x
tipo :: Peca -> Tipo
tipo (Peca a h) = a
new_pos :: Mapa -> Mapa
new_pos (Mapa ((x,y), orientacao) []) = Mapa ((x,y),orientacao) []
new_pos (Mapa ((x,y), orientacao) (h:t)) | e == Recta = Mapa (b, orientacao) (h:t)
| e == Curva Norte && orientacao == Norte = Mapa (d, Este) (h:t)
| e == Curva Norte && orientacao == Oeste = Mapa (c, Sul) (h:t)
| e == Curva Sul && orientacao == Sul = Mapa (d, Oeste) (h:t)
| e == Curva Sul && orientacao == Este = Mapa (c, Norte) (h:t)
| e == Curva Este && orientacao == Este = Mapa (d, Sul) (h:t)
| e == Curva Este && orientacao == Norte = Mapa (c, Oeste) (h:t)
| e == Curva Oeste && orientacao == Oeste = Mapa (d, Norte) (h:t)
| e == Curva Oeste && orientacao == Sul = Mapa (c, Este) (h:t)
| e == Rampa Norte && orientacao == Norte = Mapa (b, orientacao) (h:t)
| e == Rampa Sul && orientacao == Norte = Mapa (b, orientacao) (h:t)
| e == Rampa Este && orientacao == Este = Mapa (b, orientacao) (h:t)
| e == Rampa Oeste && orientacao == Este = Mapa (b, orientacao) (h:t)
| e == Rampa Sul && orientacao == Sul = Mapa (b, orientacao) (h:t)
| e == Rampa Norte && orientacao == Sul = Mapa (b, orientacao) (h:t)
| e == Rampa Oeste && orientacao == Oeste = Mapa (b, orientacao) (h:t)
| e == Rampa Este && orientacao == Oeste = Mapa (b, orientacao) (h:t)
where
b = avancar (x,y) orientacao
c = avancar (x,y) (muda_esq orientacao)
d = avancar (x,y) (muda_dir orientacao)
e = tipo (posi (h:t) (x,y) orientacao)
avancar :: Posicao -> Orientacao -> Posicao
avancar (x,y) orientacao = if (orientacao == Norte) then (x,y - 1)
else if (orientacao == Sul) then (x,y + 1)
else if (orientacao == Este) then (x + 1,y)
else (x - 1,y)
'where'行應該縮進到上面的'|'塊。我會建議在第一個'|'之前開始一個換行符以避免大量空白。 – cdk
@cdk這不是問題的原因:警衛不參與佈局。 (我自己在一個文件中測試了這個文件:有一個'where'塊的縮進比一個函數定義更多,但是小於它的守衛是完全沒問題的。) –
請複製並粘貼源代碼本身;圖像不允許我們自己重現您的錯誤並測試我們提出的修正。還包括足夠的代碼,我們可以將它加載到ghci中,並測試自己發佈的代碼是否會給出您聲稱的錯誤。 SO還有一些[開發MVCE的提示](https://stackoverflow.com/help/mcve)。 –