【问题标题】:Prolog check value in list of lists列表列表中的 Prolog 检查值
【发布时间】:2019-01-10 13:26:14
【问题描述】:

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

示例: 想象一下你有这个矩阵,它代表一个棋盘:

[ [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。我该怎么做?

【问题讨论】:

  • checkposition(Board, X, Y) :- nth0(X, Board, Line), nth0(Y, Line, Element), ....你需要检查然后Element
  • (Element == vv ; Element == aa) 怎么样?
  • 现在我发现了另一个问题。我正在使用 SICStus,当我运行它时,我发现这个错误,我无法删除:过程用户:nth0/3 不存在我已经添加了库(列表)。到代码。
  • 我已经解决了第 nth0 个问题。 @lurker,如果我使用您的代码,当它返回“否”时,程序停止。我怎样才能解决这个问题,让它不会停止?

标签: list prolog element


【解决方案1】:
% 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 年后发布的,希望对遇到此答案的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多