所以我试着在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上找到的算法
发布于 2019-11-13 11:47:57
foldr
有3个参数,但在target = foldr (^) board
中,你只给它2个参数。你不能将它与if target < x
进行比较,因为它还不是一个数字,但仍然是一个等待一个参数的函数。
https://stackoverflow.com/questions/58830026
复制相似问题