D中的fibonacci生成器与std.concurrency.Generator

时间:2017-06-25 21:14:10

标签: d

我需要在D中写一个Fibonacci系列(从a,b开始)生成器, 我看过这里的例子:

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);
            }
    });

}

感谢。

1 个答案:

答案 0 :(得分:4)

您可以使用foreach循环迭代生成器:

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

在你的情况下,它会永远屈服,所以出于测试目的,你可以设置一个计数器。

顺便说一句,我也采取相同的做法:)