gpt4 book ai didi

prolog - 取出倒数第二个元素 - Prolog

转载 作者:行者123 更新时间:2023-12-02 11:44:52 24 4
gpt4 key购买 nike

我对 Prolog 很陌生,我试图弄清楚这个(函数?)取出列表中倒数第二个元素到底发生了什么。

remove([],[]).
remove([X],[X]).
remove([_,X],[X]).
remove([X|Xs], [X|Ys]) :-
Xs = [_,_|_],
remove(Xs,Ys).

我熟悉模式匹配,因为我在 SML 方面做了一些工作。第一个显然是基本情况,当我们分解它时返回空列表。当只剩下一个时,第二个返回相同的变量。第三个看起来好像它返回最后一个元素,忽略倒数第二个元素?至于归纳的情况,如果......(这是我完全迷失的地方),它会将列表的头部附加到新列表。谁能解释一下这个函数中发生了什么,以便我可以更好地理解该语言?

最佳答案

详细阐述 CapelliC 的解释:

remove([],[]).

空列表是删除了倒数第二个元素的空列表。

remove([X],[X]).

单元素列表本身已删除倒数第二个元素。

remove([_,X],[X]).

删除倒数第二个元素的双元素列表是由双元素列表的最后一个元素组成的一个元素的列表。

remove([X|Xs], [X|Ys]) :-
Xs = [_,_|_],
remove(Xs,Ys).

第二个列表是第一个列表删除了第二个元素,并且共享相同的第一个元素,如果:

  1. 第一个列表的尾部至少包含两个元素,并且
  2. 第二个列表的尾部是第一个列表的尾部,删除了倒数第二个元素

关于prolog - 取出倒数第二个元素 - Prolog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com