我需要在Prolog中执行以下操作。
我想要定义一个变量列表。例如[x,z,k,s,r,v,w]
然后我希望我的一个函数能够从列表中弹出第一个元素,以某种方式使用它,然后当它需要另一个元素时,我希望它从该列表中弹出下一个元素。也许当函数完成时,我希望它将列表重置为原始状态。
通过简单地将列表作为参数传递,我无法想到这样做的方法。使用OO编程时,这非常简单。因为我可以有一个全局变量。
答案 0 :(得分:6)
我不确定我是否完全理解你的问题,但我认为堆栈的实现非常简单。
pop([X|List],X,List).
将使用X统一列表的头部,因此您可以根据需要使用它。并且push(X,List,[X|List])
将第三个参数统一为一个新的List,其中X被推到了头上。
或许我完全没有问你问题......
答案 1 :(得分:3)
请注意,堆栈是以纯粹的副作用免费方式实现的。由于没有使用隐式状态,所以一切都必须是显式的。通常,Prolog程序员直接使用列表,或者为此目的使用语法(DCG)。
empty([]).
pop(E, [E|Es],Es).
push(E, Es, [E|Es]).
| ?- empty(S0), push(1,S0,S1),push(2,S1,S2),pop(T,S2,S3).
S0 = []
S1 = [1]
S2 = [2,1]
T = 2
S3 = [1]