【问题标题】:Prolog - simplifying two predicates into oneProlog - 将两个谓词简化为一个
【发布时间】:2016-05-01 23:12:42
【问题描述】:

我有两个执行非常相似的功能的 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).

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

【问题讨论】:

  • 它们不是 Prolog 中的 函数。它们是谓词

标签: list split prolog predicate inverse


【解决方案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 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多