错误"互动"没有实例(Show((Int,Int) - > String)) - Haskell

时间:2018-04-23 22:11:28

标签: haskell functional-programming

我正处于回溯功能的中间位置。这是我到目前为止所做的,它正在工作,然后我添加了一个额外的值,现在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

为什么会这样?

1 个答案:

答案 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帮助我。让我们继续摇摆!