列表列表中的Prolog检查值

时间:2014-11-03 12:09:10

标签: list prolog element

我正在编写一个棋盘游戏,我想检查是否可以进行移动。要做到这一点,我需要检查位置玩家是否移动到空或有可能值。 但是,我不知道如何在不返回真假的情况下这样做。

实施例: 想象一下,你有这个代表董事会的矩阵:

[ [vv,vv,vv,vv,p1]
    [vv,aa,vv,vv,vv]
    [vv,vv,aa,vv,vv]
    [vv,p2,aa,vv,vv] ]

我想将p2移动到aa,这不是空的,但这是一个可能的举动。我如何检查这是否可能移动?我有一个程序将元素放在一个特定的位置,我正在尝试实现检查我正在移动的位置是否可能的过程。

当前代码:

elementAt(Line, 1, Y, Element):- nth0(Y, Line, Element).
elementAt([Line|Tail], X, Y, Element) :- 
   Y > 1, 
   Y1 is Y-1,
   elementAt(Tail, X, Y, Element).

checkPosition(Board, X, Y):-
   elementAt(Board, X, Y, Element),

现在,在checkPosition,我想检查Element是否等于vv或aa。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

% It is true, if 
% 1. X is the first element of the listoflists 
% 2. X is not first element of the listoflists, 
% however, it is a member of the first list in listoflists
% 3. X is a member of any other element in the listoflists

memberlist(X, [X|Xs]).
memberlist(X, [Y|Ys]) :- memberlist(X, Y).
memberlist(X, [Y|Ys]) :- memberlist(X, Ys).

我知道这是4年后发布的,希望对遇到此问题的人有所帮助。