试图返回元组

时间:2019-11-13 03:45:44

标签: haskell tuples

因此,我在尝试与Haskell的计算机对抗时,尝试制作Nim游戏,作为一项任务,但我在计算机方面苦苦挣扎。我想做的是返回一个包含堆编号(行)和要删除的编号的元组。到目前为止,我已经知道了:

ai board [] = []
ai board (x:xs) = 
    do
       let target = foldr (^) board
       if target < x then do
          let num = x-target   
          return (x, num)
       else
          ai board xs

出现此错误:

Oblig3.hs:75:1: error:
    * Non type-variable argument in the constraint: Ord (t b -> b)
      (Use FlexibleContexts to permit this)
    * When checking the inferred type
        ai :: forall (t :: * -> *) b.
              (Ord (t b -> b), Foldable t, Integral b, Num (t b -> b)) =>
              b -> [t b -> b] -> [(t b -> b, t b -> b)]
   |
75 | ai board [] = []

PS板是一个整数列表,它显示堆中还剩下多少个元素,并且计算机算法基于Nim's wikipedia

上找到的元素

1 个答案:

答案 0 :(得分:3)

foldr带有3个参数,但是在target = foldr (^) board中,您仅给出了2个参数。您无法将其与if target < x进行比较,因为它还不是数字,但是仍然一个等待另一个参数的函数。