我有一個程序生成一個列表,並在不同的階段從它刪除某些元素。有4個刪除階段,調用第4個將首先調用1,2,3然後4.謂詞被稱爲s4(Q,100),也有s1,s2,s3具有相同的preicate風格,(Q,100 )。序言列表存儲
在階段S1,我刪除元素取決於他們有多少的因素有,所以我通過Q可另一個謂詞,通過調用
removePrimes(Q,L).
這現在有列表Q減去不想要的元素。但是,Q不變,仍然具有所有原始元素。
我的問題是,有沒有給Q的結果的方式,所以它的價值可以傳遞到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 - >使4變成Q - >打印Q. – XavierNuquos 2012-04-12 12:45:04
@XavierNuquos我編輯 – m09 2012-04-12 12:59:07
當然啊!這很有道理,再次感謝莫吉! – XavierNuquos 2012-04-12 13:04:15