私はリストを生成するプログラムを持っており、異なる段階でそこから特定の要素を取り除きます。 4つの除去段階があり、4番目を呼び出すと1,2,3,3が呼び出されます。述語はs4(Q、100)と呼ばれ、同じプレスタイル形式のs1、s2、s3もあります(Q、100 )。ステージ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).
私の状況ではうまくいかないのか、s4(Q、N)(Nは整数)を呼び出してプログラムを実行しなければならないので、2つのリストを使って述語を呼び出すことはできません。だからs4(Q、100)→s3(Q、100)→s2(Q、100)→s1(Q、100)→generateList→s1をQに変更する→s2をQ - > s3をQに変更する - > makes4をQに変更する - > print Q – XavierNuquos
@XavierNuquos私が編集しました – m09
ああ、もちろん!それは完璧な意味、もう一度ありがとうMog! – XavierNuquos