Моя цель - получить эти данные:
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 (T, L) вместо build_tree (L, T)).
Итак, как я могу получить тот же результат, но просто поменять местами входные аргументы?
Я пробовал каждое «очевидное» решение (обмениваясь переменными), но я предполагаю, что это может быть не так просто, как кажется, поскольку это рекурсивный метод.