我有两个prolog谓词执行非常相似的功能,我想将它们合二为一,以简化操作。 这些是谓词:
join(DELIM, [X|XS], RESULT) :-
join(DELIM, XS, RXS),
append([X, DELIM, RXS], RESULT).
join(DELIM, [END], END).
split(DELIM, [X|XS], RESULT) :-
append([X, DELIM, RXS], RESULT),
split(DELIM, XS, RXS).
split(DELIM, [END], END).
第一个采用分隔符和列表列表,并使用分隔符将它们连接在一起。另一个则相反,将一个列表拆分为基于分隔符的其他列表的列表。即使他们的论点在同一个地方,如果我试图交换它们,它们也行不通。 如果有的话,我怎样才能将这两个谓词合而为一?
答案 0 :(得分:1)
append/2
似乎可行:
delim(D, Xs, [Ls|Ys]) :-
append([Ls, D, Rs], Xs),
delim(D, Rs, Ys).
delim(_, Xs, [Xs]).
?- delim([x],[1,x,2,3,x,4],R).
R = [[1], [2, 3], [4]] ;
...
?- delim([x],Xs,[[1], [2, 3], [4]]).
Xs = [1, x, 2, 3, x, 4]
.
要注意:可能不是universally terminating: - )