Pull to refresh

Comments 6

Прочитал первые два абзаца и остановился. Подумалось — есть же итераторы.
ты не понял. Это эмуляция yield из C# в дельфи.
Не уверен, что это средство намного удобнее и понятнее итераторов. А решает ту же задачу насколько я понимаю. Но да, прикольно, конечно, не спорю.
Не уверен, что это средство намного удобнее и понятнее итераторов
ну давай, реализуй на итераторах аналог этого:

procedure F( Generator: TGeneratorWithParam<UInt64, UInt64> );
begin
  if Random(1) = 0 then if not Generator.Yield(0) then Exit;
  if Random(10) = 0 then if not Generator.Yield(0) then Exit;
  if Random(20) = 0 then if not Generator.Yield(0) then Exit;
end;

 for X in TGenerator<UInt64>.Create( F ) do
  begin
    WriteLn( X );
  end;


и сравни количество кода.
Дело же не только в количестве строк кода, но и в его понятности. Извините, но я вот например не понимаю, что делает ваша программа.

Но должен отметить, что я не пишу на Delphi/Object Pascal уже довольно давно. В последнее время я имею дело в основном с Perl, плюс изучаю «для себя» Erlang и Haskell. Не исключаю, что решение, описанное в статье, имеет право на жизнь и в определенных условиях удобно.
Дело же не только в количестве строк кода, но и в его понятности. Извините, но я вот например не понимаю, что делает ваша программа
естественно. первых двух абзацев статьи для этого — недостаточно.

Но должен отметить, что я не пишу на Delphi/Object Pascal уже довольно давно. В последнее время я имею дело в основном с Perl, плюс изучаю «для себя» Erlang и Haskell.
в хаскеле для генерации последовательности в подобном стиле нет нужды, он и сам по себе ленивый. в perl вот:
en.wikipedia.org/w/index.php?title=Generator_(computer_programming)&section=6#1987:_Perl ну а саму статью почитай…
Sign up to leave a comment.

Articles