Итак, я пытаюсь написать крестики-нолики для эрланга с помощью тупл (учебное упражнение). Я всегда хочу, чтобы переменная Board была кортежем из девяти элементов. У меня совпадение побед, но совпадение с кошачьей игрой оказывается трудным. Я хочу сделать {_,_,_,_,_,_,_,_,_}
-> «Кошачья игра!»; , но это будет соответствовать другим элементам, таким как []
или ""
, когда я хочу, чтобы он совпадал только с x ИЛИ y, но больше ничего. Пример:
{(x||y),(x||y),(x||y),(x||y),(x||y),(x||y),(x||y),(x||y),(x||y)} -> "Cat's game!"
- это, по сути, то, что я хочу сделать, но я не знаю, как это сделать с помощью кортежей Эрланга, и это трудно для Google.
-module(d2bonus).
-export([status/1]).
status(Board) ->
case Board of
{x,x,x,_,_,_,_,_,_} -> "X Wins!";
{o,o,o,_,_,_,_,_,_} -> "O Wins!";
{_,_,_,x,x,x,_,_,_} -> "X Wins!";
{_,_,_,o,o,o,_,_,_} -> "O Wins!";
{_,_,_,_,_,_,x,x,x} -> "X Wins!";
{_,_,_,_,_,_,o,o,o} -> "O Wins!";
{x,_,_,x,_,_,x,_,_} -> "X Wins!";
{o,_,_,o,_,_,o,_,_} -> "O Wins!";
{_,x,_,_,x,_,_,x,_} -> "X Wins!";
{_,o,_,_,o,_,_,o,_} -> "O Wins!";
{_,_,x,_,_,x,_,_,x} -> "X Wins!";
{_,_,o,_,_,o,_,_,o} -> "O Wins!";
{x,_,_,_,x,_,_,_,x} -> "X Wins!";
{o,_,_,_,o,_,_,_,o} -> "O Wins!";
{_,_,x,_,x,_,x,_,_} -> "X Wins!";
{_,_,o,_,o,_,o,_,_} -> "O Wins!";
({P1,P2,P3,P4,P5,P6,P7,P8,P9}) when (P1 =:= x orelse P1 =:= y), (P2 =:= x orelse P2 =:= y), (P3 =:= x orelse P3 =:= y), (P4 =:= x orelse P4 =:= y), (P5 =:= x orelse P5 =:= y), (P6 =:= x orelse P6 =:= y), (P7 =:= x orelse P7 =:= y), (P8 =:= x orelse P8 =:= y), (P9 =:= x orelse P9 =:= y) -> "Cat's Game!";
_ -> "No winner yet"
end
.