我正在玩Tic Tac Toe,列由列表代表, 如此经典的3x3 Tic Tac充满交替的X和O,从下到上,对于三列,将是[X,O,X] [X,O,X] [X,O,X]。空可以用空来表示我猜(这是一个好主意还是坏主意)
如何检查所选列X是否已满?
我想要一个名为Checker :: board的功能 - > Int - >布尔
不确定从哪里开始定义功能Checker。
编辑:澄清
1)董事会(就像Tic Tac Toe的任何现实生活中的游戏一样)明显会开始 [空,空,空] [空,空,空] [空,空,空]
或者它将以空列表开始,函数需要将其转换为 [空,空,空] [空,空,空] [空,空,空]
2)我想检查列是否已满,以便进行错误检查。我不希望玩家将X或O添加到完整列。列可以填充X和O的任意组合,就像在Tic-Tac-Toe的真实生活游戏中途一样。
3)董事会是一份清单。人类解释的列只是列表
所以在一个tic tac toe board中,除了中间是O之外,所有X都是 [X,X,X] [X.O,X] [X,X,X]
答案 0 :(得分:1)
您可以使用
检查给定(1维)列表是否全部为X
all (== X) list
(只要您的数据类型有一个Eq
个实例,您就可以用它来提供它。
data Square = X | O | Empty
deriving (Eq)
)。
同样,您可以使用
检查每个元素是否为非空all (/= Empty) list
或定义您自己的函数isFull :: Square -> Bool
并使用all isFull list
。
您可以通过将列表索引运算符映射到列表中来从列表中提取列。
column n xss = map (!! n) xss
另一种方式,可以说更优雅,是transpose
它,然后查看行。