謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

再帰からループへ

昨日書いたこのコード、非末尾再帰からループにした形だけど、うまくESP/EBPを使ってくれるなら、呼び出しが無い分早く動くと思った。フィボナッチ数列アセンブラcall無しで書ける予感。

#!/usr/bin/dmd -run
import std.stdio,std.cstream,std.stream,std.string;

void main(){
  writefln("digraph G {");
//  writefln("graph [concentrate = true];");
//  writefln("node [shape=box]");
//  writefln("graph [rankdir = LR];");
  string parents[]=["global"];
  int n=0;
  foreach(char[] s;din){
    if(!s.length)break;
    int x;
    for(;s[x] == ' ';x++){}
    n = x/4;

    if(parents.length <= n){
      writefln(parents[n-1], " -> ", s[x..$].idup.split("(")[0]);
      parents ~= s[x..$].idup.split("(")[0];
    }else{
      writefln(parents[n], " -> ", s[x..$].idup.split("(")[0]);
      parents = parents[0..n+1] ~ s[x..$].idup.split("(")[0];
    }
  }
  writefln("}");
}