リストが与えられると、そのパワーセットの順列を返すプログラムをPrologで書くことになっています。
言い忘れたことの 1 つ: リストを反転する述語が既にあります: deep_reverse(List,RevList)。
例:?-sublist_perm([a,b,c],X).
が返されます:(重複は許可されます)
X = [] ;
X = [c] ;
X = [b] ;
X = [b, c] ;
X = [c, b] ;
X = [a] ;
X = [a, c] ;
X = [c, a] ;
X = [a, b] ;
X = [b, a] ;
X = [a, b, c] ;
X = [b, a, c] ;
X = [b, c, a] ;
X = [a, c, b] ;
X = [c, a, b] ;
X = [c, b, a]