PROLOG - 如何实现堆栈?

时间:2010-06-04 22:11:14

标签: prolog

我必须在Prolog中实现stac,但不使用list。堆栈的每个元素都应指向元素之前 有可能做到吗?我可以在运行时程序中定义规则吗? (比如:element('foo','bar').其中foo是元素结束条的内容是指向另一个的指针吗?

2 个答案:

答案 0 :(得分:2)

那么问题是什么?你的问题已经是答案了。您的'bar'应包含element(X,Y)或某种bottom

stack_empty(bottom).
stack_push(S, X, element(X, S)).

revlist_push(S0, [], S0).
revlist_push(S0, [X|T], S):-
    stack_push(S0, X, S1),
    revlist_push(S1, T, S).

revlist_pop(S0, []):- stack_empty(S0). % bottom of stack
revlist_pop(S0, [X|T]):-
    stack_push(S1, X, S0), % pop - is reverse push
    revlist_pop(S1, T).

revlist(L0, L):-
    stack_empty(S0),
    revlist_push(S0, L0, S),
    revlist_pop(S, L).

实际上像Prolog这样的语言中的列表通常由递归数据表示。 cons(a, cons(b, cons(c, nil)))或仅[a | [b | [c | [] ]]]

答案 1 :(得分:1)

堆栈中的指针?我认为你的定义混淆了。我认为你的意思是链表。

链接列表是一种数据结构,其中一个元素指向下一个元素,从而导致非常灵活的数据增长和收缩。

Stack是先用后进的数据结构。

是的堆栈可以写成没有列表,链表也是如此,数组列表不像链表那样多才多艺,但它具有大部分链表功能。