我有一个程序生成一个列表,并在不同的阶段从它删除某些元素。有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