从列表中删除重复项并返回修改后的列表Prolog

发布于 2025-01-17 13:20:38 字数 300 浏览 0 评论 0原文

prolog谓词将列入列表并删除重复项,然后返回修改后的列表。

下面的代码非常适合删除重复项并返回它,但是它采用了两个参数。如何获得1个参数的相同结果?示例remove_duplicates(列表)。

remove_duplicates([],[]).
remove_duplicates([X|Y],Z):-
  member(X,Y),
  !,
  remove_duplicates(Y,Z). 
remove_duplicates([X|Y],[X|Z]):-
  remove_duplicates(Y,Z).

Prolog predicate to take in a list and remove duplicates then return the modified list back.

The below code works well for removing duplicates and returning it however it is taking two parameters. How can i achieve the same result taking 1 parameter? example remove_duplicates(List).

remove_duplicates([],[]).
remove_duplicates([X|Y],Z):-
  member(X,Y),
  !,
  remove_duplicates(Y,Z). 
remove_duplicates([X|Y],[X|Z]):-
  remove_duplicates(Y,Z).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦回梦里 2025-01-24 13:20:38

如果不使用 破坏性赋值谓词,不鼓励使用,不应在您的问题中使用。

以下代码使用 setarg/3 执行您想要的实例化列表的操作,以破坏性地修改术语,但不建议这样做:

% Warning: this procedure uses destructive assignment predicates
da_remove_duplicates(L):-  
  setof(X, member(X, L), [First|Rest]), % may use this instead: remove_duplicates(L, [First|Rest]),
  setarg(1, L, First),
  setarg(2, L, Rest).
da_remove_duplicates([]).

示例运行:

?- L=[1,1,3],da_remove_duplicates(L).
L = [1, 3].

You cannot do what you want in prolog (modify an instantiated part of a term) without using destructive assignment predicates, which are discouraged and should not be used in your problem.

The following code does what you want for instantiated lists using setarg/3 to destructively modify a term, but is not recommended:

% Warning: this procedure uses destructive assignment predicates
da_remove_duplicates(L):-  
  setof(X, member(X, L), [First|Rest]), % may use this instead: remove_duplicates(L, [First|Rest]),
  setarg(1, L, First),
  setarg(2, L, Rest).
da_remove_duplicates([]).

Sample run:

?- L=[1,1,3],da_remove_duplicates(L).
L = [1, 3].
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文