2016-09-24 5 views
-4

Как сгенерировать последовательность целых чисел на основе первого и последнего числа для for для перебора?Lua - генерировать последовательность чисел

Следующий псевдокод

for i in sequence(4,9) do 
    print(i) 
end 

должен произвести следующий вывод

4 
5 
6 
7 
8 
9 

Пожалуйста, включите краткое объяснение того, что решение делает в фоновом режиме, и что терминология позволила бы один, чтобы найти решение.

Попытки поиска приводят к неиспользуемым огромным страницам документации.

+0

Я обнаружил, что i = 4, 9 - это решение благодаря http://stackoverflow.com/questions/12020574/lua-for-variable-in-range, но я бы попросил объяснить, что это делает и что он называется. «,» является непознаваемым. Аналогично попытке найти «in» в документации Pythons. :) – qubodup

+2

Это называется цикл for ?! – hjpotter92

+1

https://devdocs.io/lua~5.3/index#3.3.5 – hjpotter92

ответ

2

Чтобы сделать это, вы можете использовать numeric for loop. Подробные сведения см. В разделе «Программирование в разделе Lua», на который я ссылался, или в разделе руководства Lua по адресу For statement.

1

Только для полной записи есть три способа сделать этот цикл, один с немного отличающимся синтаксисом, и 2 с точным синтаксисом, как ваш псевдокод. Ссылки указывают на соответствующие главы в Programming in Lua (кстати, это отличная книга для чтения).

1) Использование простой numeric for loop - в этом случае вы не будете использовать sequence:

for i=4,9 do 
    print(i) 
end 

2) Реализация sequence в виде closure:

function sequence(from,to) 
    local i = from - 1 
    return function() 
    if i < to then 
     i = i + 1 
     return i 
    end 
    end 
end 

for i in sequence(4,9) do print(i) end 

3) Реализовать sequence как coroutine :

function sequence(from, to) 
    return coroutine.wrap(function() 
    for i=from,to do 
     coroutine.yield(i) 
    end 
    end) 
end 

for i in sequence(4,9) do print(i) end 
+1

'' функции последовательность (от, до, Ind) локальной Ind = Ind или 1 локального я = от - тй к = к + ому функции возврата() I = I + Ind возвращения я <к и I или nil end end'' – warspyking

+0

Просто предложение для упрощения и добавления дополнительных функций :) – warspyking

Смежные вопросы