2

我再次需要你的帮助,我正在尝试理解这段 erlang 代码。

Line="This is cool".
Lines = [Line || _Count <- lists:seq(1,5)].

输出是

["This is cool","This is cool","This is cool","This is cool","This is cool"]

我不明白打印所需次数背后的逻辑。是什么Line || _*****意思?

4

3 回答 3

2

看这段代码:

Line = "This is cool".
Lines = [{Line, Count} || Count <- lists:seq(1, 5)].

在这里,您创建一个大小为 2 的元组列表,其中第一个元素是常量,第二个元素取自列表理解的源列表。如果你从元组中删除一个元素,它不会改变列表的结构。

于 2013-03-20T15:19:28.540 回答
2

由于Line列表推导右侧的值没有改变,因此每个元素的值都是相同的,即 的值Line

列表理解的右侧只是确定元素的数量。

于 2013-03-20T14:39:06.017 回答
0

可以这样读:NewListe = [Dosomething || 元素 <- 列表]

以这种方式创建一个 NewListe:对于 Liste 的每个元素,使用 Dosomething 构建一个新元素。

逐步给出 Liste = lists:seq(1,5) = [1,2,3,4,5];

对于每个元素,只需丢弃元素的值(这就是它被写为 _Count 的原因)和

Dosomething 只是发回“这很酷”的值,

结果是 5 次“这很酷”的列表

["这很酷","这很酷","这很酷","这很酷","这很酷"]

<- 称为生成器;标志后|| 您可能有生成器或过滤器。例如,如果我们假设您有一个不同元素的列表,并且只想获取可打印的列表项,将其转换为大写,您将需要一个生成器:

X <- ["toto",5,"Hello",atom]获取每个元素

过滤器:

io_lib:printable_list(X)仅选择可打印列表

和一个转变:

string:to_upper(X)转为大写

总之,你有什么期望:

1> [string:to_upper(X) || X <- ["toto",5,"Hello",atom], io_lib:printable_list(X)].
["TOTO","HELLO"]
2>
于 2013-03-20T19:29:00.877 回答