我的目标是有这个输入:重写递归sicstus序言功能
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))。
那么,我怎样才能产生相同的结果,但只是交换输入参数? 我试过每个“明显”的解决方案(交换变量),但我猜测它可能不像看起来那么容易,因为它是递归方法。
它完美的作品:) – keyser