Prolog中递归的具体示例

时间:2017-05-20 13:37:20

标签: recursion prolog

polarbear([],H,[H]). 
polarbear([H|T],Y,[H|Z]):- polarbear(T,Y,Z).

这是prolog代码。输入?-polarbear([1,2], 6, P).获取P =[1,2,6].

问题是我只是不明白它是如何工作的,我一直在试图弄清楚Prolog是如何做它正在做的事情。

我对Prolog有一些经验,但是我不明白这一点,所以任何有关它如何做以帮助我理解Prolog的指导将不胜感激。

1 个答案:

答案 0 :(得分:0)

声明第一个参数是头H和尾T的列表,第三个参数是头H和尾Z的列表。所以它强制(通过使用统一)两个列表的头是相同的。递归地,两个列表变得相同,除了第三个参数列表在末尾有另外一个元素(元素Y)并且这由第一个子句定义。请注意,第二个子句仅适用于具有一个或多个元素的列表。因此,当我们检查空列表时作为递归的基础,然后由于第一个子句而产生的第三个列表仅包含元素Y的另一个元素。