LがリストではないRのすべての用語を含むリストである場合にのみ成功する述語f(L、R)を作成する必要があります。例えば:
f(L,[1,2,3,[4,5,6],[[7,8,9]],[]]).
与える必要があります:
L = [1,2,3,4,5,6,7,8,9]
代わりに次の結果を与える述語を書きました。
L = [1,2,3,4,5,6,7,8,9,[]]
結果に空のリストが表示されないようにする必要があります。私の述語は次のとおりです。
f([],[]).
f(V,[H|T]):- H = [_|_] -> append(L,R,V),
f(L,H), f(R,T),!;
V = [H1|T1], H1=H, f(T1,T).
私には2つの疑問があります。まず第一に、空のリストが結果に含まれるべきではありません。また、カットを入れないとどうして動かないのかわかりません(!)。実際、カットを入れないと上記のような結果になりますが、別の結果を求めると永久にループします。なぜこれがループするのか本当にわかりません。