Ним эквивалент постижения списка Python

Поскольку Nim имеет много общих возможностей с Python, я не удивлюсь, если он также реализует понимание списков Python:

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

Это действительно возможно в Ним? Если нет, может быть реализован с помощью шаблонов / макросов?

4 ответа

Решение

Понимание списка уже реализовано в 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]]

Обратите внимание, что макрос требует указать тип элементов.

Согласно rosettacode, Nim не имеет списочных представлений, но они могут быть созданы с помощью метапрограммирования.

[РЕДАКТИРОВАТЬ]

Как указывает bluenote10, списочные представления теперь являются частью будущего модуля:

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]

import sugar

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

Ним перевод вашего кода:

      import sugar, strutils
var str = "Hello 12345 World"
echo collect(for s in str:
  if s.isDigit(): s)
Другие вопросы по тегам