prolog - 检查项目是否在列表中右侧/左侧/之间的某个位置

时间:2017-12-07 00:12:05

标签: prolog

我必须弄清楚如何找出该项目是否在列表中的其他两个项目之间。我的想法是拥有somewhereleftsomewhereright函数,然后以somewherebetween(X,Y,Z,L) :- somewhereleft(X,Y,L), somewhereright(Y,Z,L)的方式使用它。我已经实现了功能,以确定该项目是否在右侧right(X,Y, [X, Y|_]). right(X, Y, [_|T]) :-right(X, Y, T).和左侧left(X, Y, L) :- right(Y, X, L).;但是,无法找到递归的somewhereleft/right函数。

1 个答案:

答案 0 :(得分:1)

追加/ 3 可能是您的朋友

in_order(X, Y, Z, Lst) :-
    append(_, [X|T1], Lst),
    append(_, [Y|T2], T1),
    append(_, [Z|_], T2).

例如

?- in_order(a,b,c,[a,e,b,d,c]).
true .

但是

?- in_order(a,b,c,[c,b,a,b,c,b,a]).
true ;
false.