我正在处理99 Prolog Problems中的第 26 题:
P26 (**) 生成从列表的 N 个元素中选择的 K 个不同对象的组合
例子:
?- combination(3,[a,b,c,d,e,f],L). L = [a,b,c] ; L = [a,b,d] ; L = [a,b,e] ;
所以我的程序是:
:- use_module(library(clpfd)).
combination(0, _, []).
combination(Tot, List, [H|T]) :-
length(List, Length), Tot in 1..Length,
append(Prefix, [H], Stem),
append(Stem, Suffix, List),
append(Prefix, Suffix, SubList),
SubTot #= Tot-1,
combination(SubTot, SubList, T).
我的查询结果开始正常,但随后返回全局堆栈错误:
?- combination(3,[a,b,c,d,e,f],L).
L = [a, b, c] ;
L = [a, b, d] ;
L = [a, b, e] ;
L = [a, b, f] ;
Out of global stack
我不明白为什么它一开始可以工作,但后来挂起,直到它给出全局堆栈错误。发生在终端的 SWISH 和 swi-prolog 上。