私の目標は、次のような情報を提供することです。
L = [a,b,c], build_tree(L,T).
この出力で:
L = [1,30,kth,5],
T = b(l(a),b(l(b),b(l(c)))) ?
yes
そして、このコードを使用すると、ツリーの葉の数がカウントされます。
leaves(l(X), [X]).
leaves(b(L1,L2),V):-
leaves(L1,V1),
leaves(L2,V2),
append(V1,V2,V).
入力としてツリーではなくリストを関数に与えるだけで、目的の出力を取得できます。例:
L = [a,b,c], leaves(T,L).
ここでの唯一の問題は、引数が間違った順序で取得されることです(つまり、build_tree(L、T)ではなくbuild_tree(T、L))。
では、どうすれば同じ結果を生成できますが、入力引数を単純に入れ替えることができますか?私はすべての「明白な」解決策(変数を入れ替える)を試しましたが、再帰的な方法であるため、見た目ほど簡単ではないかもしれないと推測しています。