算術バイナリツリーを評価しようとしています。エラー: `compute/4 'は関数ではありません
tree_calc(tree(L, Root, R), Eval) :- compute(Root, L, R, Eval).
compute(Root, 'empty', 'empty', Root).
compute(Root, L, R, Eval):- number(L), number(R), E =..[Root,L,R], Eval is E.
compute(Root, L, R, Eval):-
L = tree(LL, LRoot, LR), R = tree(RL, RRoot, RR),
E =..[Root, compute(LRoot, LL, LR, LEval), compute(RRoot, RL, RR, REval)],
Eval is E.
私は入力してプログラムを実行すると:
tree_calc(tree(tree(empty,2,empty),
'+',tree(tree(empty,1,empty),
'/',tree(empty,2,empty))), Eval).
を私はエラーを取得しています:
ERROR: is/2: Arithmetic: `compute/4' is not a function
私はこのエラーとしてスローされる理由を動作するように見えることはできません私は、関数が定義されていない場合にのみこれが表示されると考えました。
ありがとうございました。
OPが 'tree/3'の定義を変更しない限り、最初の解決策は正しいはずです。これは彼らの[最初の投稿](http://stackoverflow.com/questions/36197849/returning-results-in-recursion)の続きです。今OPは中間の引数 'Root'を呼び出しますが、少し混乱します。 – lurker