相关疑难解决方法(0)

解释将两个列表附加在一起的Prolog算法

这是一个将两个列表附加在一起的算法:

Domains
list= integer*

Predicates
nondeterm append(list, list, list)

Clauses
append([], List, List) :- !.
append([H|L1], List2, [H|L3]) :- append(L1, List2, L3).

Goal
append([9,2,3,4], [-10,-5,6,7,8], Ot).
Run Code Online (Sandbox Code Playgroud)

结果是一个列表[9,2,3,4,-10,-5,6,7,8],它保存在" Ot"中.

我的问题是,这是如何工作的?

我理解的是,在每个递归调用中,在第一个列表中,只得到尾部作为列表(从而减小它的大小1直到它为止[]),第二个参数" List2"根本不变,第三个参数.起初它是[],并且在每次递归调用之后你得到它的尾巴,但是因为它是[],它保持不变[].

那么,为什么突然间,在第三个参数(" Ot")中我们有附加的列表?有人可以一步一步地解释这个算法吗?

tail-recursion prolog turbo-prolog tailrecursion-modulo-cons

3
推荐指数
1
解决办法
3216
查看次数