Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell(generateTrees)中的匹配类型有问题_Haskell_Tree - Fatal编程技术网

Haskell(generateTrees)中的匹配类型有问题

Haskell(generateTrees)中的匹配类型有问题,haskell,tree,Haskell,Tree,我和两个家伙一起参与haskell项目,我们在以下代码方面遇到了不少问题: 我试图向您提供所有必要的信息: 从模块Types.hs中: class Game g s | g -> s where findPossibleMoves :: Player -> g -> [(s,g)] identifyWinner :: g -> Player -> Maybe Player data Player = Player1 | Player2 deriving

我和两个家伙一起参与haskell项目,我们在以下代码方面遇到了不少问题:

我试图向您提供所有必要的信息:

从模块Types.hs中:

class Game g s | g -> s where
  findPossibleMoves :: Player -> g -> [(s,g)]
  identifyWinner :: g -> Player -> Maybe Player 

data Player = Player1 | Player2 deriving (Eq,Ord)
下面是我们要实现的代码:

generateGameTree :: Game g s => g -> Player -> Tree (g,Player) s
generateGameTree g p = ([ Node ((snd x),p) [] | x <- (findPossibleMoves p g )])
我们都知道,函数的returntype和我们的returntype不匹配,但这肯定是另一个错误


我们非常感谢您的帮助,请提前感谢

您可能希望将此操作拆分为两个较小的操作:

一个通用的
展开
函数,首先给定一个
s
类型的种子和一个计算一层树的函数,通过重复调用下一代种子来生成整个树。此定义将具有以下类型:

unfold :: (s -> (v, [(e,s)])) -> s -> Tree v e
unfold next seed = _fillThisIn

然后,您可以使用此函数定义
generateGameTree
。使用
open
的直觉是
s
类型的
seed
代表游戏状态,函数
next
计算一次移动后可能出现的新状态(连同
v
e
“输出”)。

可能感兴趣的对象:

现在可以正常工作,没有编译器错误:


generateGameTree g p=Node(g,p)[((fst x),generateGameTree(snd x)(nextPlayer p))| x非常感谢我们现在找到了解决方案!
unfold :: (s -> (v, [(e,s)])) -> s -> Tree v e
unfold next seed = _fillThisIn