如何追加列出Prolog的?(How do I append lists in Prolog?)

2019-06-17 11:18发布

如何追加列出Prolog的? 我已经在互联网上搜索,我发现这个(从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] 但我怎么两个列表追加在一起吗?

例,

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

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

此外,我不知道在什么样的递归发生。 (我追查,但不明白)

编辑:我想知道这是什么应该如何编码,如预定义的功能append()在序言。

Answer 1:

如你张贴的代码是(几乎)确定。 条款的顺序只是需要交换(为了使这个谓词定义富有成效,在生成方式使用时):

append( [], X, X).                                   % your 2nd line
append( [X | Y], Z, [X | W]) :- append( Y, Z, W).    % your first line

这定义了三个参数之间的关系,比方说ABC

在第一行上说

  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的关系,我们知道我们希望它是,所以我们只是写下关于它的一些明显的事实,我们希望它实现,它必须遵循,如果你的法律将。

因此,假设我们已经为我们定义了这个代码,有什么法律不必遵循? 显然,一些追加列表的尾部与另一个列表给了我们与2号清单追加的完整列表的结果的尾巴。

这决定了我们如何在第一个列表“一起滑动”。 但是,如果有无处更多滑动? 如果我们已经达成了列表的末尾? 然后,我们来到了空列表,并附加一个空列表与另一个列表为我们提供了列表作为结果。 明显。 这就是在你的代码,第二行告诉我们,它说

令人惊讶的是,已经写下来,这两个法律append/3必须遵循,是一样写下定义本身。

此外:这解释了它从一个声明点; 做检查出通过M09的应答表示它更从操作上来看。



Answer 2:

但我怎么两个列表追加在一起吗?

你回答了你自己的问题:您可以使用append/3

如果要追加XY和结果存储在Z ,你做

append(X, Y, Z)

如果例如X = [1, 2]Y = [3, 4, 5]然后Z将被绑定到[1, 2, 3, 4, 5]

| ?- append([1,2],[3,4,5], X).

X = [1,2,3,4,5]

yes
| ?- 


文章来源: How do I append lists in Prolog?