Nim相当于Python的列表理解

时间:2015-04-27 12:33:51

标签: python list-comprehension nim nimrod

由于Nim与Python共享许多功能,如果它实现Python's list comprehension我也不会感到惊讶:

string = "Hello 12345 World"
numbers = [x for x in string if x.isdigit()]
# ['1', '2', '3', '4', '5']

这在尼姆实际上是否可行?如果没有,可以用模板/宏实现吗?

3 个答案:

答案 0 :(得分:15)

列表理解已在Nim中实现,但目前仍在future包中(即,您必须import future)。它被实现为一个名为lc的宏,允许编写如下的列表推导:

lc[x | (x <- 1..10, x mod 2 == 0), int]

lc[(x,y,z) | (x <- 1..n, y <- x..n, z <- y..n, x*x + y*y == z*z), tuple[a,b,c: int]]

请注意,宏需要指定元素的类型。

答案 1 :(得分:7)

根据rosettacodeNim has no list comprehensions, but they can be created through metaprogramming

<强> [编辑]

正如bluenote10所指出的,列表推导现在是future module的一部分:

import future
var str = "Hello 12345 World"
echo lc[x | (x <- str, ord(x) - ord('0') in 0..9),  char]

以上代码段产生@[1, 2, 3, 4, 5]

答案 2 :(得分:3)

import sugar

let items = collect(newSeq):
  for x in @[1, 2, 3]: x * 2

echo items

输出@[2, 4, 6]