[erlang-questions] behavior of lists:append/1
zxq9
zxq9@REDACTED
Tue Sep 17 16:25:11 CEST 2019
On 2019/09/17 22:13, Raimo Niskanen wrote:
> On Mon, Sep 16, 2019 at 10:53:57PM +0900, zxq9 wrote:
>> On 2019/09/16 11:49, Richard O'Keefe wrote:
>>> The fact that L is a well-formed list is verified N times,
>>> for a total cost O(N * |L|). But with the current definition,
>>> the cost is O(N), independent of |L|.
>>
>> Hm... just to beat a dead horse...I suppose we could get away with a
>> single check:
>>
>> -export([append/2]).
>>
>> append(Xs, Ys) when is_list(Ys) -> combine(Xs,Ys).
>>
>> combine([X | Xs], Ys) -> [X | combine(Xs, Ys)];
>> combine([], Ys) -> Ys.
>
> No.
>
> lists:append/2 can be used and *is* used by existing code to construct
> improper lists. It would break backwards compatibility.
The accept/2 -> combine/2 combination accepts improper lists just fine.
That was the whole point and I addressed the detail of actually
*needing* to accept improper lists for the sake of legacy code. It only
checks whether the 'Ys' is a list *at all* before proceeding.
The beaten horse is now absolutely craven for some abuse.
-Craig
More information about the erlang-questions
mailing list