このディレクトリの索引
#  数式が全部文字に置き換えられたモノから数式に戻して計算する関数を作りたいと思います。 
#  例えば、[ Kazu 0.1, Tasu, Kazu 2.1, Hiku, Kazu 3.0, Kake, Kazu 2.9, Waru, Kazu 0.9]があって、 
#  これを戻すと 0.1 + 2.1 - 3.0 * 2.9 / 0.9 -> -7.46 みたいに結果をだしたい。


:- op(200,fx,kazu).
:- op(200,fx,tasu).
:- op(200,fx,hiku).
:- op(200,fx,kake).
:- op(200,fx,waru).


'数式が全部文字に置き換えられたモノから数式に戻して計算する関数を作りたいと思います。 
例えば、[ Kazu 0.1, Tasu, Kazu 2.1, Hiku, Kazu 3.0, Kake, Kazu 2.9, Waru, Kazu 0.9]があって、 
これを戻すと 0.1 + 2.1 - 3.0 * 2.9 / 0.9 -> -7.46 みたいに結果をだしたい。'(L,_式,_結果) :-
        数式が全部文字に置き換えられたモノから数式に戻して計算する(L,_式,_結果).

数式が全部文字に置き換えられたモノから数式に戻して計算する(L,_式,_結果) :-
        演算子を置換する(_ならび,_演算子を置換されたならび),
        atomic_list_concat(_演算子を置換されたならび,' ',_式文字列),
        atom_to_term(_式文字列,_式,_),
        _結果 is _式.

演算子を置換する([],[]).
演算子を置換する([kazu _値|R1],[_値|R2]) :-
        演算子を置換する(R1,R2).
演算子を置換する([_演算子文字列 _値|R1],[_演算子,_値|R2]) :-
        '演算子文字列・演算子'(_演算子文字列,_演算子),
        演算子を置換する(R1,R2).

'演算子文字列・演算子'(tasu,+).
'演算子文字列・演算子'(hiku,-).
'演算子文字列・演算子'(kake,*).
'演算子文字列・演算子'(waru,/).