リストを生成するプログラムがあり、さまざまな段階でリストから特定の要素を削除します。4 つの除去段階があり、4 番目を呼び出すと、最初に 1,2,3 が呼び出され、次に 4 が呼び出されます。述語は s4(Q, 100) と呼ばれ、同じ述語スタイル (Q,100) を持つ s1、s2、s3 もあります。 )。
ステージ s1 で、要素の数に応じて要素を削除します。そのため、Q を呼び出して別の述語に渡します。
removePrimes(Q,L).
これでリスト Q から望ましくない要素を引いたものになります。ただし、Q は変更されておらず、元の要素がすべて残っています。
私の質問は、Q に L の結果を与える方法があるので、その値を s2 に渡して再度変更できるようにする方法はありますか?
これが私のコードの残りの部分です。
s4(Q,X):-
s3(Q,X).
s3(Q,X):-
s2(Q,X).
s2(Q,X):-
s1(Q,X).
%Further alter the list here
%Q is not passed back, since it is unchanged in s1
s1(Q,X):-
s0(Q,X),
%remove the undesired elements
removePrimes(Q,L).
%L now contains the list we need, but Q is unchanged!!!
s0(Q, N) :-
%generate the list
validPair(Q).