因此,我在尝试与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
上找到的元素答案 0 :(得分:3)
foldr
带有3个参数,但是在target = foldr (^) board
中,您仅给出了2个参数。您无法将其与if target < x
进行比较,因为它还不是数字,但是仍然一个等待另一个参数的函数。