我必须在Prolog中实现stac,但不使用list。堆栈的每个元素都应指向元素之前
有可能做到吗?我可以在运行时程序中定义规则吗? (比如:element('foo','bar').
其中foo是元素结束条的内容是指向另一个的指针吗?
答案 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是先用后进的数据结构。
是的堆栈可以写成没有列表,链表也是如此,数组列表不像链表那样多才多艺,但它具有大部分链表功能。