本人在学prolog,做作业时遇到栈的问题,求助
prolog吧
全部回复
仅看楼主
level 1
枯Mu葬花 楼主
我使用ADT栈 做 后缀表达式换成前缀表达式
[5,4,*]变成[*,5,4]
目前做第一步时遇到困难 我想先实现原始栈中所有的元素全部直接倒入另一个栈中。
使用递归时出现问题,希望能有朋友帮助解答。
push_stack(Top,Stack,Newstack):-stack(Top,Stack,[Top|Stack]).
valid([],[]).
valid([Head|Tail],Emp):-push_stack(Head,Emp,New),write(New),valid(Tail,New).
post2pre([],[]).
post2pre(Expression,Result):-
Emp=[],
valid(Expression,Emp).
我新栈在New这个变量中,但是我不知道如何将其赋值给Result。
我试过将valid添加Result,可是都是出现问题
2015年02月08日 03点02分 1
level 8
不懂帮顶。。。。。
2015年02月08日 04点02分 2
level 7
大概猜下
lz
意思,push_stack就是把元素放到表前。valid就是想把表翻转。首先这两个都有内建谓词,其次lz可能没弄清楚prolog的传值机制。在prolog如果你一定想用函数风格的话,应该这样写
f(x) return y 变为
f(x,y).
其中y一直保持未绑定状态直到返回值的时候。像这样:
push_stack(Top,Stack,[Top|Stack]).
valid([],R,R).
valid([Head|Tail],Emp,R):-push_stack(Head,Emp,New),write(New),valid(Tail,New,R).
post2pre(Expression,Result):-
Emp=[],
valid(Expression,Emp,Result).
如果lz只是想把最后一个字符换到最前面。
turn(L,R):-post2pre(L,[Ch|Re]),post2pre(Re,RRe),R=[Ch|RRe].
输出
?- turn([1,2,+],R).
[1][2,1][+,2,1][2][1,2]
R = [+, 1, 2].
2015年02月11日 14点02分 3
就是这个!!!!!太感谢了
2015年02月15日 10点02分
1