例如..Prolog的变量名
insert(X,Ys,[X|Ys]).
insert(X,[Y|Ys],[Y|Zs]) :- insert(X,Ys,Zs)
为什么使用ZS作为变量..基本情况显然是简单.. X :: YS的头。 但递归声明将成为第一个目标的延续。你可以第二次获得[b,a,c] 你得到[b,c, c,a]
但是程序中Zs的实际技术定义是什么?
[trace] 1 ?- insert(a,[b,c],L).
Call: (6) insert(a, [b, c], _G522) ? creep
Exit: (6) insert(a, [b, c], [a, b, c]) ? creep
L = [a, b, c] ;
Redo: (6) insert(a, [b, c], _G522) ? creep
Call: (7) insert(a, [c], _G595) ? creep
Exit: (7) insert(a, [c], [a, c]) ? creep
Exit: (6) insert(a, [b, c], [b, a, c]) ? creep
L = [b, a, c] ;
是否继续开始在recusive电话吗?这意味着第一个目标在基本情况下结束了..所以我们下一次开始递归?我也可以看到L开始使用不同的变量位置(又名_G522 vs _G595)。