我正在尝试编写一个如下所示的谓词:
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.
答案 0 :(得分:1)
谓词成立
List1
以Variable1
开头,List2
以Variable2
开头或如果
List1
从任何内容开始,List2
以任何内容开头,谓词保留为List1
的尾部和List2
的尾部关于你的编辑:
您的第一个定义(顺便说一句,缺少.
)表示谓词适用于空列表。情况并非如此,因为列表不在同一位置包含Variable1
和Variable2
。例如尝试[Variable1|_]
之类的内容。
至于第二个,你正在做点什么。但是我建议你像[Variable1|_], ..., Variable1
那样表达它,即让prologs匹配确保列表的头部等于变量。