PROLOGのスタックの概念を使用して算術式を後置 (逆ポーランド記法) から前置形式に変換するプログラムを作成するのを手伝ってくれる人はいますか? 算術式には、4 つの算術演算子+ 、 - 、 / 、 *および単項関数を含めることができます。sin, cos, tan, exp, log and sqrt.
1180 次
1 に答える
1
append /2 便利なリストコンビネータです。これにより、かなり一般的な方法で、任意の数のリスト間の連結関係が可能になります。ここでは基本的なものだけを示します。単項関数としていくつかの詳細を追加して割り当てを完了する必要があります。 isop/1 を定義します。
pos2pre(Pos, Pre) :-
append([A, B, [O]], Pos), isop(O), A \= [], B \= [],
pos2pre(A, APre),
pos2pre(B, BPre),
!, append([[O], APre, BPre], Pre).
pos2pre([P], [P]).
ちょっとしたテスト:
?- pos2pre([1,5,*,2,+],X).
X = [+, *, 1, 5, 2].
同じロジックを記述しようとする必要があると思いますが、append /3 を使用すると、手順がどのように機能するかを理解するのに役立ちます。
于 2013-02-22T14:03:12.103 に答える