On Monday, 30 January 2017 at 11:03:52 UTC, Profile Anaysis wrote:
I need to yield from a complex recursive function too allow visualizing what it is doing.

e.g., if it is a tree searching algorithm, I'd like to yield for each node so that the current state can be shown visually.

I realize that there are several ways to do this but D a yield version without additional threads would be optimal. I don't need concurrency or speed, just simple.

If you don't want to use fibers then an alternative to yeilds is to use callbacks during iteration.

Example:
struct Tree(T)
{
   T value;
   Tree!(T)[] children;
}

void iterDepth(T)(Tree!(T) tree, void delegate(Tree!T) cb)
{
    cb(tree);
    foreach(child; tree.children)
    {
        iterDepth(child, cb);
    }
}

unittest
{
    auto tree = ... //Make the tree somehow
    iterDepth(tree, (node)
    {
        writeln(node.value);
    });
}

Callbacks have their set of problems but it's one of the simpler ways to do this.












Reply via email to