RD1*_*RD1 6 javascript python haskell list-comprehension
看看Python和Javascript中的理解,到目前为止,我看不到一些我认为在Haskell等语言中理解最强大的主要特性.
他们允许像多个发电机这样的东西?或者它们只是一个基本的地图过滤器形式?
如果他们不允许多个发电机,我发现它们非常令人失望 - 为什么这些东西被遗漏了?
Dan*_*tin 12
Python允许多个生成器:
>>> [(x,y,x*y) for x in range(1,5) for y in range(1,5)]
[(1, 1, 1), (1, 2, 2), (1, 3, 3), (1, 4, 4),
(2, 1, 2), (2, 2, 4), (2, 3, 6), (2, 4, 8),
(3, 1, 3), (3, 2, 6), (3, 3, 9), (3, 4, 12),
(4, 1, 4), (4, 2, 8), (4, 3, 12), (4, 4, 16)]
Run Code Online (Sandbox Code Playgroud)
还有限制:
>>> [(x,y,x*y) for x in range(1,5) for y in range(1,5) if x*y > 8]
[(3, 3, 9), (3, 4, 12), (4, 3, 12), (4, 4, 16)]
Run Code Online (Sandbox Code Playgroud)
更新:Javascript的语法类似(在Firefox上使用javascript shell的结果):
var nums = [1, 2, 3, 21, 22, 30];
var s = eval('[[i,j] for each (i in nums) for each (j in [3,4]) if (i%2 == 0)]');
s.toSource();
[[2, 3], [2, 4], [22, 3], [22, 4], [30, 3], [30, 4]]
Run Code Online (Sandbox Code Playgroud)
(出于某种原因,在javascript shell中评估上下文内容的某些内容需要eval间接使列表推导工作.<script>当然,标记内的Javascript 不需要它)