检查元素后返回列表的Prolog谓词

时间:2017-04-05 22:45:24

标签: list prolog predicate

我是prolog的新手。我正在尝试编写一个接受元素和列表的谓词,并检查列表中元素的出现并返回元素后面的其余部分。
例子是mypredicate(3,[1,2,3,4,5,6,7]) 返回[3,4,5,6,7] 我希望我能解释一下。

mypredicate(X, [X|_]).
mypredicate(X, [_|T]) :- mypredicate(X,T).

这基本上只是检查列表中是否有元素。 如何在X后写一个返回列表其余部分的规则?

2 个答案:

答案 0 :(得分:2)

您需要返回基本情况中的所有列表,如:

mypredicate(X, [X|T],[X|T]).

还有条款:

 mypredicate(X, [_|T]) :- mypredicate(X,T).
当列表的头部为X时使用

,因此您需要确保在这种情况下头部与X不同:

mypredicate(X, [H|T],L) :- dif(X,H),mypredicate(X,T).

答案 1 :(得分:2)

你应该添加第三个参数

mypredicate(X,[X|L],[X|L]).
mypredicate(X,[_|T],L) :- mypredicate(X,T,L).

如果您只对首次出现XL感兴趣,请在第一条规则中添加剪辑:

mypredicate(X,[X|L],[X|L]) :- !.

另一种方法,使用库(列表)谓词:

@ tim.newport评论后

编辑更正

mypredicate(X,L,[X|T]) :- append(_,[X|T],L).