gpt4 book ai didi

list - 遍历所有(行,列)可能性?

转载 作者:行者123 更新时间:2023-12-01 08:13:22 26 4
gpt4 key购买 nike

这将是一个井字游戏实现:

data Row    = A | B | C  deriving (Show, Read, Eq, Ord, Enum, Bounded)
data Column = X | Y | Z deriving (Show, Read, Eq, Ord, Enum, Bounded)
type Pos = (Row, Column)
data Player = Player String
data Field = Field [(Pos, Player)]
initialField :: Field
initialField = Field []

如您所见,initialField 只是一个空列表,当玩家移动时,(pos, player) 元组将被添加到列表中。到目前为止,一切都很好。但现在我无法编写 possibleMoves::Field -> [Pos] 函数来获取空字段。如何迭代 Haskell 中的所有行、列可能性?我觉得我的方法是错误的,但我是 Haskell 的新手,所以我没有更好的主意。

最佳答案

我们可以通过列表推导获得所有位置(另见其他答案)

positions :: [Pos]
positions = [(r,c) | r <- [A,B,C], c <- [X,Y,Z]]

所有玩 map 的人

occupied :: Field -> [Pos]
occupied (Field l) = fmap fst l

然后我们可以定义可能的Moves(你需要导入Data.List来获取\\,list的区别):

possibleMoves :: Field -> [Pos]
possibleMoves f = positions \\ (occupied f)

更紧凑的版本利用列表理解约束:

possibleMoves :: Field -> [Pos]
possibleMoves (Field l) = [(r,c) | r <- [A,B,C], c <- [X,Y,Z], (r,c) `notElem` occupied]
where occupied = fmap fst l

关于list - 遍历所有(行,列)可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16469981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com