我再次需要你的帮助,我正在努力理解这段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 || _*****
的含义是什么?
答案 0 :(得分:2)
由于Line
的值未在列表推导的右侧更改,因此每个元素的值相同,即Line
的值。
列表理解的右侧只是确定元素的数量。
答案 1 :(得分:2)
看看这段代码:
Line = "This is cool".
Lines = [{Line, Count} || Count <- lists:seq(1, 5)].
在这里,您可以创建一个大小为2的元组列表,其中第一个元素是常量,第二个元素是从列表推导的源列表中获取的。如果从元组中删除元素,它将不会更改列表的结构。
答案 2 :(得分:0)
它可以这样读: NewListe = [Dosomething ||元素&lt; - 听力
以这种方式创建一个NewListe:对于每个Liste元素,使用Dosomething构建一个新元素。
一步一步地给出了Liste = list:seq(1,5)= [1,2,3,4,5];
对于每个元素,只丢弃元素的值(这就是为什么它被写为_Count)和
Dosomething只发回价值&#34;这很酷&#34;,
,结果是5次&#34;这很酷&#34;
的列表[&#34;这很酷&#34;,&#34;这很酷&#34;,&#34;这很酷&#34;,&#34;这很酷&#34;,&# 34;这很酷&#34;]
&lt; - 被称为发电机;签到后||你可能有发电机或过滤器。例如,如果我们想象您有一个不同元素的列表,并且想要只获得可打印的列表项,则转为大写,您将需要一个生成器:
X&lt; - &#34; toto&#34;,5,&#34; Hello&#34;,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>