このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/897
#  [1] 授業単元:プログラミング 
#  [2] 問題文(含コード&リンク): 
#  1.「逆ポーランド記法で書かれた式を入力させ、計算結果を出力するプログラムを作れ」 
#  2.「qが入力されるまで動作を繰り返すこと」 
#  3.「指定のスタックのプログラムを利用し、stack.hを各自で用意。構造体の定義も移動せよ」 
#  4.「使用できるのは四則演算と=のみ」 
#  5.「=はスタックの一番上の要素を表示するためのもの」 
#  以上を満たせばどんなものでもok 
#  

「逆ポーランド記法で書かれた式を入力させ、計算結果を出力するプログラムを作れ」 :-
        「逆ポーランド記法で書かれた式を入力させ、」(L),
        「逆ポーランド記法で書かれた式を入力させ、計算結果を出力するプログラムを作れ」(L,[],[]).
「逆ポーランド記法で書かれた式を入力させ、計算結果を出力するプログラムを作れ」([q],_,_) :- !.
「逆ポーランド記法で書かれた式を入力させ、計算結果を出力するプログラムを作れ」(L,L1,_スタック_1) :-
        「計算結果を出力するプログラムを作れ」(L,[],_スタック_1,_スタック_2),
        「逆ポーランド記法で書かれた式を入力させ、」(L2),
        「逆ポーランド記法で書かれた式を入力させ、計算結果を出力するプログラムを作れ」(L2,[],_スタック_2).

「逆ポーランド記法で書かれた式を入力させ、」 :-
        write(' ? '),
        get_line(Line),
        aPLIT(Line,['+','-','*','/','='],L),!.

「計算結果を出力するプログラムを作れ」([A|R1],L1,_スタック_1,_スタック_2) :-
        評価(A,L1,L2,_スタック_1,_スタック_3),
        「計算結果を出力するプログラムを作れ」([A|R1],L2,_スタック_3,_スタック_2).

評価('+',[A,B],[],_スタック_1,_スタック_2) :- C is A + B,push(C,_スタック_1,_スタック_2),!.
評価('-',[A,B],[],_スタック_1,_スタック_2) :- C is A - B,push(C,_スタック_1,_スタック_2),!.
評価('*',[A,B],[],_スタック_1,_スタック_2) :- C is A * B,push(C,_スタック_1,_スタック_2),!.
評価('/',[A,B],[],_スタック_1,_スタック_2) :- C is A / B,push(C,_スタック_1,_スタック_2),!.
評価('=',L1,[],_スタック_1,_スタック_2) :-
        pop(_スタック_1,_スタック_2,A),
        write_formatted('%t\n',[A]),!.
評価(N,L1,[N|L1],_スタック_1,_スタック_1).

push(A,L1,[A|L1]).

pop([A|L1],L1,A).