Tje*_*lle 8 erlang functional-programming list
我一直在阅读Erlang和OTP,并偶然发现了一个关于不正确列表的问题.
即使您认为自己有一个聪明的想法,也不要试图以这种方式使用列表单元格 - 它容易出错并且会混淆人类和程序分析工具.也就是说,创建不正确的列表有一两个有效用途,但它们被认为是高级编程技术,超出了本书的范围.
超出本书的范围?它必须是Stackoverflow的完美之选!
所以我的问题当然是一些有效的用途是什么?
Erlang文档建议的一个用法是伪造懒惰列表:
-module(lazy).
-export([ints_from/1]).
ints_from(N) ->
fun() ->
[N|ints_from(N+1)]
end.
Run Code Online (Sandbox Code Playgroud)
在Eunit 用户手册的最底部,在关于惰性生成器的部分中描述了一种有效的用法。此代码示例应该创建一个非常长的列表,一次将使用一个元素,因此它不是一次生成整个列表,而是创建了一个不正确的列表,其尾部描述了如何生成列表的其余部分:
lazy_test_() ->
lazy_gen(10000).
lazy_gen(N) ->
{generator,
fun () ->
if N > 0 ->
[?_test(...)
| lazy_gen(N-1)];
true ->
[]
end
end}.
Run Code Online (Sandbox Code Playgroud)
换句话说,这是一个懒惰的列表,Erlang 本身并没有给你。