Prolog新手。 我想要一个交换1到0和0到1的程序并回答这个问题:
?- swap([1,1,0,1,0,0,0,1], L2).
L2 = [0,0,1,0,1,1,1,0]
答案 0 :(得分:6)
complement(0, 1).
complement(1, 0).
swap(X, Y) :- maplist(complement, X, Y).
答案 1 :(得分:3)
适用于所有方向的CLPFD解决方案,供参考:
:- use_module(library(clpfd)).
swap(X, Y) :-
maplist(#\=, X, Y),
X ins 0..1,
Y ins 0..1.
具体做法是:
?- swap(X,Y).
X = Y, Y = [] ;
X = [_2640],
Y = [_2658],
_2640 in 0..1,
_2640#\=_2658,
_2658 in 0..1 ;
X = [_3200, _3206],
Y = [_3224, _3230],
_3200 in 0..1,
_3200#\=_3224,
_3224 in 0..1,
_3206 in 0..1,
_3206#\=_3230,
_3230 in 0..1 ;
…
当另一个答案中的swap/2
没有时,正常工作:
?- swap2(X,Y).
X = Y, Y = [] ;
X = [0],
Y = [1] ;
X = [0, 0], % Doesn't enumerate ([1],[0]), etc.
Y = [1, 1] ;
X = [0, 0, 0],
Y = [1, 1, 1] ;
…