Ним эквивалент постижения списка 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)