このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1311089619/20
#  [2] 問題文(含コード&リンク): 2項以上10項以下の計算が可能な電卓を作成せよ。 
#  演算子は(+,-,*,/)だけとする。 
#  例:式を入力してください 
#  式:1+1*8/4*8+6/3*2+1 enterkey 
#  答え:22 
#  出来ればhttp://ime.nu/ideone.com/Ki9Ag を基に作成して頂けますか? 
#  上記のソースは3項だけしか出来ません。 
#  

結合強度('+',400).
結合強度('-',400).
結合強度('*',500).
結合強度('/',500).

'2項以上10項以下の計算が可能な電卓' :-
        readln(_項_演算子ならび),
        式評価(_項_演算子ならび,[_値]),
        writef('%t\n',[_値]).

式評価(_項_演算子ならび,_値) :-
        結合度の高い演算処理(_項_演算子ならび,_項_演算子ならび2),
        結合度の低い演算処理(_項_演算子ならび2,[_値]).

結合度の高い演算処理([],[]) :- !.
結合度の高い演算処理([_値],[_値]) :- !.
結合度の高い演算処理([A,_演算子,B|R1],L) :-
        member(_演算子,[*,/]),
        P =.. [_演算子,A,B],
        _値1 is P,
        結合度の高い演算処理([_値1|R1],L),!.
結合度の高い演算処理([A,_演算子,B|R1],[A,_演算子,B|R2]) :-
        member(_演算子,[+,-]),
        結合度の高い演算処理(R1,R2),!.

結合度の低い演算処理([_値],_値) :- !.
結合度の低い演算処理([A,_演算子,B|R1],_値) :-
        member(_演算子,[+,-]),
        P =.. [_演算子,A,B],
        _値1 is P,
        結合度の低い演算処理([_値1|R1],_値),!.