Nim эквивалент понимания списка Python
Так как у Nim есть много возможностей с Python, я не удивлюсь, если он реализует Python list comprehension:
string = "Hello 12345 World"
numbers = [x for x in string if x.isdigit()]
# ['1', '2', '3', '4', '5']
Действительно ли это возможно в Ниме? Если нет, может быть реализована с помощью шаблонов/макросов?
Ответы
Ответ 1
ОБНОВЛЕНИЕ: Начиная с версии 0.19.9 (Источник) осмысление списков устарело.
Понимание списка реализовано в Nim в пакете sugar
(т.е. вам нужно import sugar
). Он реализован в виде макроса под названием 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]]
Обратите внимание, что макрос требует указать тип элементов.
Ответ 2
Согласно rosettacode, у Nim нет списочных представлений, но они могут быть созданы с помощью метапрограммирования.
[EDIT]
Как указывает 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]