嗨,有人可以分解这个递归代码,这样我就可以完全理解它给出的输出。我真的很困惑它的工作方式:
listcomb([],[]).
listcomb([X|Y], [X|Z]) :-
listcomb(Y,Z).
listcomb([_|Y],Z) :-
listcomb(Y,Z).
?- listcomb([1,2,3], X).
X = [1, 2, 3] ;
X = [1, 2] ;
X = [1, 3] ;
X = [1] ;
X = [2, 3] ;
X = [2] ;
X = [3] ;
X = [].
三江源
答案 0 :(得分:1)
它通过以下方式将第二个参数与第一个参数中所有可能的元素组合统一起来:
运行时,谓词将耗尽第二个子句,而不是回溯到第三个子句,依此类推,直到耗尽所有选项并停止使用第一个子句。