检查Haskell

时间:2016-11-26 07:04:09

标签: haskell

我正在玩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]

1 个答案:

答案 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它,然后查看行。