我有一个问题,我如何制作一个程序,说给定一个列表,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 ..
的程序但我不知道如何
感谢
答案 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.
我没有看到问题......