Haskell(generateTrees)中的匹配类型有问题
我和两个家伙一起参与haskell项目,我们在以下代码方面遇到了不少问题: 我试图向您提供所有必要的信息: 从模块Types.hs中: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
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