Спасибо за красивое решение! Использовать лямбду с двумя параметрами, а работать только с одним в голову не пришло. Только для “каждый второй” надо условие на <> поменять или просто взять Odd(i). Тут же счет с нуля идет, а не с единицы.
Попутно вопрос возник. Или я чего-то не понимаю - и тогда все эти SeqGen - обезьяна с гранатой, или я все понимаю правильно, и это ошибка.
begin
var s:=SeqGen(7,1,t->t+1);
s.Select((x,i)->Rec(x,i)).Println;
s.Select((x,i)->Rec(x,i)).Println;
end.
Выдача:
(1,0) (2,1) (3,2) (4,3) (5,4) (6,5) (7,6)
(8,0) (9,1) (10,2) (11,3) (12,4) (13,5) (14,6)
А теперь так:
begin
var s:=Seq(1,2,3,4,5,6,7);
s.Select((x,i)->Rec(x,i)).Println;
s.Select((x,i)->Rec(x,i)).Println;
end.
И выдача:
(1,0) (2,1) (3,2) (4,3) (5,4) (6,5) (7,6)
(1,0) (2,1) (3,2) (4,3) (5,4) (6,5) (7,6)
Я понимаю. что лямбда t->t+1 “толкает” к наращиванию генерируемых значений на единицу (она с этой целью и писалась), понимаю, что механизм вычисления членов последовательности “ленивый” (и это отлично), но почему при повторном обращении к последовательности игнорируется установка начального значения в единицу? Когда SeqRandom - там вопросов нет, но тут-то?