0

我有一个问题,我如何制作一个程序,说明给定一个列表,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 的程序..

但我不知道怎么做

谢谢

4

1 回答 1

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.

没看出问题。。。。

于 2013-05-15T15:47:48.463 回答