我的目標是有這個輸入:重寫遞歸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