我有以下程序:
% finds all members in sorted list L1 that are not in the sorted L2
% and puts them in NL
make_list(L1,L2,NL):-
make_list(L1,L2,NL,x).
make_list([],_,[],_):-!.
% X represents the last value parsed from L1
make_list(L1,[],L2,X):-!,
make_list(L1,[99999999],L2,X).
make_list([X1|L1],[X2|L2],[X3|NewL],Last):-
(
(X1<X2,
X1 \= Last,
X3=X1,!,
make_list(L1,[X2|L2],NewL,X1);
X1<X2,!,
make_list(L1,[X2|L2],[X3|NewL],X1)
)
);
(
X1=X2,!,
make_list(L1,[X2|L2],[X3|NewL],*)
);
make_list([X1|L1],L2,[X3|NewL],*).
我的问题是,当最后一个值相同(即:)?- make_list([1,2],[2],L).
时,代码不起作用,因为
make_list([X1|L1],L2,[X3|NewL],*).
和
make_list(L1,[X2|L2],[X3|NewL],*)
它将包含至少一个变量(第三个列表)的列表传递给make_list([],_,[],_)
. 有一条注释说明了程序的作用。如何让代码做它应该做的事情?
我还在这里问了一个关于相同但完全不起作用的代码的问题:括号是如何工作的?.