Подтвердить что ты не робот

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']

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

4b9b3361

Ответ 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]