2017-06-25 34 views
2

我需要写一个斐波那契数列中的d发生器(从A,B开始), 我在这里看到的例子:斐波纳契发电机std.concurrency.Generator

https://dlang.org/library/std/concurrency/generator.html

import std.concurrency; 
import std.stdio; 


void main() 
{ 
    auto tid = spawn(
{ 
     while (true) 
     { 
      writeln(receiveOnly!int()); 
     } 
    }); 

    auto r = new Generator!int(
    { 
     foreach (i; 1 .. 10) 
      yield(i); 
    }); 

    foreach (e; r) 
    { 
     tid.send(e); 
    } 
} 

但现在我不知道如何调用我写的发电机:

import std.concurrency; 
import std.stdio; 
import std.conv; 
import std.string; 

void main() 
{ 
    writeln("Enter a then b"); 
    auto a_str = readln.strip; 
    auto b_str = readln.strip; 
    int a = to!int(a_str,16); 
    int b = to!int(b_str,16); 


    auto tid = spawn(
    { 
     while (true) 
     { 
      writeln(receiveOnly!int()); 
     } 
    }); 

    auto fib = new Generator!int(
    { 
      yield(a); 
      yield(b); 
      while(true){ 
      int temp = b; 
      b = a+b; 
      a = temp; 
      yield(b); 
      } 
    }); 

} 

感谢。

回答

4

你可以遍历了发电机foreach循环:

foreach (n; fib) { 
    writefln("%d\n", n); 
} 

在你的情况下,它会永远保持高产,所以对于测试的目的,您可以设置一个计数器。

顺便说一句,我也采取相同的过程:)