3
我知道還有其他方法可以避免使用累加器,並且內置的++
會將一個列表附加到另一個列表。但是,如果我用累加器構建我自己的尾遞歸附加函數,有什麼方法可以在下面的代碼片段之一中使用lists:reverse()
?謝謝Erlang將一個列表附加到另一個列表中
joinWithAccumulator2(X,Y) ->
joinWithAccumulator2(lists:reverse(X), [], Y).
joinWithAccumulator2([], [], A) ->
A;
joinWithAccumulator2([X | Xs], [], A) ->
joinWithAccumulator2(Xs, [], [ X | A]).
我不知道erlang是否支持差異列表。 –
雖然arity 3函數中的第二個參數未使用。累加器最終成爲第二個列表。 –
我對Erlang並不是很熟悉,但我相信它的列表是渴望的,而不是懶惰 - 所以它需要返回一個完整的列表,而不是一個可以提供下一個按需元素的暫停函數。此外,函數式列表(單鏈接/不可變)需要通過推送前端元素來擴展堆棧樣式。如果這兩個條件都成立,你需要以不同的方式反轉你的輸入列表 - 要麼使用'reverse',要麼通過遞歸輸入以最後開始(有效地使用棧作爲反轉列表) – comingstorm