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