Prolog - 将两个谓词简化为一个

Prolog - simplifying two predicates into one

我有两个执行非常相似功能的序言谓词,我想将它们合二为一以简化事情。 这些是谓词:

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).

第一个接受一个分隔符和一个列表列表,并使用分隔符将它们连接在一起。另一个则相反,根据分隔符将一个列表拆分为其他列表的列表。即使他们的争论在同一个地方,如果我试图交换他们,他们也不会奏效。 如果有的话,我怎样才能将这两个谓词合二为一?

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 :-)