如何追加列出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()
在序言。
如你张贴的代码是(几乎)确定。 条款的顺序只是需要交换(为了使这个谓词定义富有成效,在生成方式使用时):
append( [], X, X). % your 2nd line
append( [X | Y], Z, [X | W]) :- append( Y, Z, W). % your first line
这定义了三个参数之间的关系,比方说A
, B
和C
。
在第一行上说
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的应答表示它更从操作上来看。
但我怎么两个列表追加在一起吗?
你回答了你自己的问题:您可以使用append/3
。
如果要追加X
和Y
和结果存储在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
| ?-