在Prolog中使用2个列表和变量进行谓词

时间:2014-09-23 12:19:50

标签: prolog

我正在尝试编写一个如下所示的谓词:

predicate(List1,List2,Variable1,Variable2)

每当List1包含与List2包含Variable2相同位置的Variable1时,我想要成立。示例:?- predicate([1,2,2,3,4,5], [a,a,b,c,d,e], 4, d) true.

请不要误解我的意思,我不想要问题的完整代码。我只是在寻找一个可能会让我朝着正确方向前进的人,关于如何解决这个问题的想法。

编辑: 至于下面的答案,我试图在考虑第一个陈述时创建一个规则。但它没有用,我收到了很多错误。

predicate([],[],Variable1,Variable2)

predicate([A|_],[B|_],Variable1,Variable2):-
    A is Variable1,
    B is Variable2.

1 个答案:

答案 0 :(得分:1)

如果

谓词成立

  • List1Variable1开头,List2Variable2开头

或如果

  • List1从任何内容开始,List2以任何内容开头,谓词保留为List1的尾部和List2的尾部

关于你的编辑:

您的第一个定义(顺便说一句,缺少.)表示谓词适用于空列表。情况并非如此,因为列表在同一位置包含Variable1Variable2。例如尝试[Variable1|_]之类的内容。

至于第二个,你正在做点什么。但是我建议你像[Variable1|_], ..., Variable1那样表达它,即让prologs匹配确保列表的头部等于变量。