gpt4 book ai didi

list - 如何在 Prolog 中 append 列表?

转载 作者:行者123 更新时间:2023-12-03 11:50:31 26 4
gpt4 key购买 nike

如何在 Prolog 中 append 列表?我在互联网上搜索过,发现了这个(来自 http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_7.html)

append([X|Y],Z,[X|W]) :- append(Y,Z,W).  
append([],X,X).

所以它得到了 Z通过删除 [X|Y] 的元素在 [X|W] .但是如何将两个列表 append 在一起?

例子,
appendlist([1,2],[3,4,5],X).

结果将是 X = [1,2,3,4,5] .

我也不知道递归中发生了什么。 (我查了一下,但没看懂)

编辑:我想知道的是它应该如何编码才能像预定义的 append() 一样起作用。在序言中。

最佳答案

您发布的代码(几乎)没问题。子句的顺序只需要交换(为了使这个谓词定义富有成效,当以生成方式使用时):

append( [], X, X).                                   % (* your 2nd line *)
append( [X | Y], Z, [X | W]) :- append( Y, Z, W). % (* your first line *)
这定义了三个参数之间的关系,比方说 A , BC .
您的第一行说,“ C 是 append AB 的结果,如果 AC 是非空列表,它们都具有相同的头部(即第一个元素)和尾部 C 的结果是在 A 的尾部 append 相同的第二个参数 B 的结果。
  a        a
----------
b b
c c
. d d
e e
. .
或者从左到右:
         a | b c .
| d e .
a | b c d e .

append( [],
Z,
Z ).
append( [X | Y ],
Z,
[X | W ] ) :- append(
Y, Z, W).
仔细想想,这完全是有道理的。它的作用是,我们要定义 append/3关系,我们知道我们想要它成为什么,所以我们只写下一些我们希望它实现的明显事实,如果你愿意,它必须遵守的法律。
那么假设我们已经为我们定义了这个代码,它必须遵循哪些法律?显然,将某个列表的尾部 append 到另一个列表中会给我们一个将完整列表与第二个列表 append 在一起的结果的尾部。
这定义了我们如何“沿着”第一个列表“滑动”。但是,如果没有其他地方可以滑动怎么办?如果我们已经到达该列表的末尾怎么办?然后我们到达了空列表,将另一个列表 append 到一个空列表中,我们得到了该列表作为结果。明显地。这就是你的代码中的第二行告诉我们的,它说,“将一个空列表与另一个列表相加会产生该列表作为结果”。
令人惊讶的是,写下这两条法则 append/3必须遵循,与写下定义本身相同。
另外:这是从声明的角度解释的;退房 an answer by m09这更多地从操作的角度显示了它。

关于list - 如何在 Prolog 中 append 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11539203/

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