Practical use of improper lists in Erlang (perhaps all functional languages)

后端 未结 4 1650
时光取名叫无心
时光取名叫无心 2020-12-14 23:16

I\'ve been reading Erlang and OTP in action, and stumbled upon a question with regards to improper lists.

Don’t be tempted to use list cel

4条回答
  •  没有蜡笔的小新
    2020-12-14 23:46

    One valid use is described at the very bottom of the Eunit user manual, in the section about lazy generators. This code example is supposed to create a very long list that will be consumed one element at a time, so instead of generating the entire list at once it creates an improper list whose tail describes how to generate the rest of the list:

    lazy_test_() ->
        lazy_gen(10000).
    lazy_gen(N) ->
        {generator,
         fun () ->
             if N > 0 ->
                    [?_test(...)
                     | lazy_gen(N-1)];
                true ->
                    []
             end
         end}.
    

    In other words, it's a lazy list, which Erlang itself doesn't give you.

提交回复
热议问题