我正处于回溯功能的中间位置。这是我到目前为止所做的,它正在工作,然后我添加了一个额外的值,现在GHCi正在打印错误。我还不熟悉这种语言,我也不知道如何解决这个问题。救命啊!
backtracking :: [[Int]] -> (Int,Int) -> (Int,Int) -> String --montapuercos (posActual, vida)
backtracking matriz montapuercos memory | checkMove (-1,0) montapuercos memory matriz = "Norte "++(backtracking matriz (-1+(fst montapuercos),(snd montapuercos)) montapuercos)
| checkMove (0,1) montapuercos memory matriz = "Este "++(backtracking matriz (fst montapuercos,(snd montapuercos)+1) montapuercos)
| checkMove (1,0) montapuercos memory matriz = "Sur "++(backtracking matriz (fst montapuercos+1,(snd montapuercos)) montapuercos)
| checkMove (0,-1) montapuercos memory matriz = "Oeste "++(backtracking matriz (fst montapuercos,(snd montapuercos)-1) montapuercos)
| montapuercos == (length matriz,length(head matriz)) = " Llegué a la salida"
checkMove :: (Int,Int) -> (Int,Int) -> (Int,Int) -> [[Int]] -> Bool
checkMove (mx,my) (pA1,pA2) (mem1,mem2) matriz | ( (pA1+mx) >= 0 && (pA1+mx) < length matriz ) &&
( (pA2+my) >= 0 && (pA2+my) < length (head matriz) ) &&
( (pA1+mx) /= mem1 && (pA2+my) /= mem2 ) = True
| otherwise = False
这是我得到的错误
<interactive>:105:1:
No instance for (Show ((Int, Int) -> String))
arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it
为什么会这样?
答案 0 :(得分:1)
这是因为我增加了参数的数量,但在我调用函数时忘了添加它,这就是我收到错误的原因:
backtracking [[18,0,0],[0,0,0],[0,0,6]] (0,0)
但我这样宣布:
backtracking :: [[Int]] -> (Int,Int) -> (Int,Int) -> String
对于Haskell中的新手来说,这对我理解为什么会出现错误非常有用。感谢@Thomas M. DuBuisson帮助我。让我们继续摇摆!