2016-11-26 110 views
-2

我在玩Tic Tac Toe并且列以列表形式表示, 所以经典的3x3 Tic Tac充满了交替的X和O,来自从下到上,对于三列,将是[X,O,X] [X,O,X] [X,O,X]。 Empty将由Empty表示(我认为这是个好主意还是坏主意)检查“列表中的列表”中的特定列表是否已满或未在Haskell中

如何检查选定列X是否已满?

我想有一个叫做检验器功能::板 - >诠释 - >布尔

不是真的知道从哪里开始就定义功能检查。

编辑:澄清

1)板(如井字的任何现实生活的比赛)显然会开始作为 [空,空,空] [空,空,空] [空,空,空]

,或者它会开始为空的列表和功能需要将其变换到 [空,空,空] [空,空,空] [空,空,空]

2)我想检查列是否已满,所以要进行错误检查。我不希望玩家将X或O添加到整列中。列可以用X和O的任意组合填满,就像在Tic-Tac-Toe的现实生活游戏中途一样。

3)董事会是列表的列表。由人类解释列只是列表

因此,在所有X的除了中间是一个O的tic tac脚趾板,是[X,X,X] [XO,X]

+1

我很困惑,1)你是什么意思的“空”。 2)你想检查列是否已满?什么? 3)董事会应该是行列的列表? –

+0

1)董事会(像井字游戏的任何现实生活中的游戏)将显然开始 [空,空,空] [空,空,空] [空,空,空] 或它将开始作为空列表和函数需要将其转换为 [空,空,空] [空,空,空] [空,空,空] 2)我想检查列是否已满,所以要错误检查。 3)董事会是列表的列表。由人类解释的列仅仅是列表 因此,在所有X的除了中间是O的井字棋牌是 [X,X,X] [XO,X] [X,X,X] –

回答

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

+0

谢谢你,但如果我需要检查1维列表是否已满,一般情况下怎么办?所以说它是[X,X,O],并且玩家试图在其中播放X或O(任何地方,或者让我们只是说列表的尾部或头部来简化),那么一个错误检查并防止玩家在这些完整列表中玩游戏? 上面的解决方案只检查同类型列表,这将帮助我检查胜利条件,虽然哈哈。 –

+0

我编辑了解决这个问题的答案。 – luqui

相关问题