如何检查B是否不在A和B之间

时间:2013-05-15 15:14:49

标签: list prolog

我有一个问题,我如何制作一个程序,说给定一个列表,B不在A和C的中间?我可以假设A和C只有一个位置..

这样:

?-not_between(A,B,C,[A,D,C,B]
true
?-not_between(A,B,C,[B,A,D,C]
true
?-not_between(A,B,C,[B,C,D,A]
true
?-not_between(A,B,C,[C,D,A,B]
true

像:

我做了一个相反的程序(检查B是否在A和C之间)。

我之间的代码是:

bet(S1,S2,S3,[S1,S2,S3|_]).
bet(S1,S2,S3,[S3,S2,S1|_]).
bet(S1,S2,S3,[_|R]):-entre(S1,S2,S3,R).

我想创建一个名为not_between ..

的程序

但我不知道如何

感谢

1 个答案:

答案 0 :(得分:3)

使用您已有的程序:

\+ is_betwenn(List, A, B, C).

\+有时会写为not。检查您的实施。

有了这个实现(注意小修正!):

bet(S1,S2,S3,[S1,S2,S3|_]).
bet(S1,S2,S3,[S3,S2,S1|_]).
bet(S1,S2,S3,[_|R]) :- bet(S1,S2,S3,R).

not_bet(S1,S2,S3,List) :- \+ bet(S1,S2,S3,List).

?- not_bet(1,2,3,[1,3,2]).
true.
?- bet(1,2,3,[1,3,2]).
false.
?- not_bet(1,2,3,[3,2,1]).
false.
?- bet(1,2,3,[3,2,1]).
true ;
false.

我没有看到问题......

相关问题