Что должно произойти, когда назначена функция генератора? [закрыто]
Вопрос
Если у меня есть язык программирования с функциями первого класса. Какой должна быть семантика, когда функция генератора является общей? Р>
Например:
var f = function() {
foreach (i in 0..42)
yield i;
}
int a = f(); // 0
int b = f(); // 1
// Assigning the generator function
var g = f;
int c = g(); // ??
int d = f(); // ??
Я могу представить три вещи:
<Ол>На мой взгляд, лучший ответ - самый убедительный аргумент в пользу того или иного механизма. Часто я считаю, что уровень техники является наиболее убедительным аргументом. Р>
Решение
Если у вас есть ссылочная семантика на вашем языке, и назначение обычно является ссылочным назначением, тогда вам нужен вариант 1.
Это то, что происходит в Python, где генерируются объекты , а присвоение является ссылочным присваиванием (даже если вы вызываете .next () для получения следующего значения, скорее чем "вызов" генератора).
Вот краткая демонстрация того, как это ведет себя в Python:
>>> def gen():
... for i in range(42):
... yield i
...
>>> f = gen().next
>>> a = f()
>>> b = f()
>>> g = f
>>> c = g()
>>> d = f()
>>> a, b, c, d
(0, 1, 2, 3)