我想定义一个成员谓词。成员(A,B)意味着列表A的所有成员都是列表B的成员。 top(N)定义A可以有多长。Prolog中的成员谓词
这是我的尝试:
top(5).
members([X], L):-
member(X, L).
members([X| Xs], L):-
member(X, L),
members(Xs, L),
length(Xs, M),
top(N),
M < N.
我想用它如下:
members(L, [1,2,3]).
我的执行的问题是,如果我;得到新的答案,我会完成一个错误:超出本地堆栈
?- members(I, [1,2,3]).
I = [1] ;
I = [2] ;
I = [3] ;
I = [1, 1] ;
I = [1, 2] ;
I = [1, 3] ;
I = [1, 1, 1] ;
I = [1, 1, 2] ;
I = [1, 1, 3] ;
I = [1, 1, 1, 1] ;
I = [1, 1, 1, 2] ;
I = [1, 1, 1, 3] ;
I = [1, 1, 1, 1, 1] ;
I = [1, 1, 1, 1, 2] ;
I = [1, 1, 1, 1, 3] ;
;ERROR: Out of local stack
如何更改我的代码以防止此内存不足?
该评论不会导致解决方案。 –