在Prolog中实现堆栈

时间:2011-11-28 13:20:30

标签: prolog

我需要在Prolog中执行以下操作。

我想要定义一个变量列表。例如[x,z,k,s,r,v,w]

然后我希望我的一个函数能够从列表中弹出第一个元素,以某种方式使用它,然后当它需要另一个元素时,我希望它从该列表中弹出下一个元素。也许当函数完成时,我希望它将列表重置为原始状态。

通过简单地将列表作为参数传递,我无法想到这样做的方法。使用OO编程时,这非常简单。因为我可以有一个全局变量。

2 个答案:

答案 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]