2011-10-20 9 views
1
で式ツリーのリストを作成する

のは、私は式ツリーを形成することを可能にする、次のプロローグコードを考えてみましょう:プロローグ

plus(_,_). 

eval(A, A) :- number(A). 
eval(plus(A, B), R) :- eval(A, A_R), eval(B, B_R), R is A_R+B_R. 

私は簡単に式ツリーに次のように定義し、評価することができます

eval(plus(1,2), R). 

R=3 

言語によっては、表現木を構築することができます。それらを変数に代入して、後で使用することができます。擬似コード:

my_expr = plus(plus(1, 2), 3) 

私の現在のツリー表現で私は同様の結果を得ることができますか?私は、各ノードに異なる式ツリーを持つリストを持っていたいと思います。ご例えば

[ plus(1, 2), plus(3,plus(2,1)), 3 ] 

答えて

1

の線に沿って何か

my_expr = plus(plus(1, 2), 3) 

あなたは=のB/C左手と右手側は一致していないことを行うことはできません。 my_exprが変数(大文字)だった場合、これは真で、my_exprがツリープラス(プラス(1,2)、3)にバインドされます。これをチェックしてください -

?- My_expr = plus(plus(1, 2), 3), 
    eval(plus(My_expr, My_expr), Times2). 

Times2 = 12 

My_exprはあなたがリストに入れたり、ダウンストリーム表現を呼び出したりするための完全に正当な構造です。