testing Yield Prolog

mono Graph.exe
where Graph.cs
is

using System;
using System.Collections.Generic;
using YieldProlog;

namespace eg {
  //@prefix eg: <http://eulersharp.sf.net/graph#>.
  class Graph {
    static void Main(string[] args) {
      YP.assertFact("eg:twoway", new object[] { "eg:paris", "eg:orleans"
});

      YP.assertFact("eg:twoway", new object[] { "eg:paris", "eg:chartres"
});

      YP.assertFact("eg:twoway", new object[] { "eg:paris", "eg:amiens" });

      YP.assertFact("eg:twoway", new object[] { "eg:orleans", "eg:blois"
});

      YP.assertFact("eg:twoway", new object[] { "eg:orleans", "eg:bourges"
});

      YP.assertFact("eg:twoway", new object[] { "eg:blois", "eg:tours" });

      YP.assertFact("eg:twoway", new object[] { "eg:chartres", "eg:lemans"
});

      YP.assertFact("eg:twoway", new object[] { "eg:lemans", "eg:angers"
});

      YP.assertFact("eg:twoway", new object[] { "eg:lemans", "eg:tours" });

      YP.assertFact("eg:twoway", new object[] { "eg:angers", "eg:nantes"
});

      foreach (bool l in go());
    }

    public static IEnumerable<bool> go() {
      Variable A = new Variable();
      Variable B = new Variable();
      foreach (bool l2 in path(A, B)) {
        YP.write(new Functor2("eg:path", A, B) + ".");
        YP.nl();
      }
      yield return false;
    }

    static IEnumerable<bool> twoway(object X, object Y) {

      return YP.matchFact("eg:twoway", new object[] { X, Y });
    }



    public static IEnumerable<bool> path(object X, object Y) {
      //System.Diagnostics.StackTrace st = new
System.Diagnostics.StackTrace(1);
      foreach (bool l2 in twoway(X, Y)) {
        yield return false;
      }
      foreach (bool l2 in twoway(Y, X)) {
        yield return false;
      }
      Variable Z = new Variable();
      foreach (bool l2 in twoway(X, Z)) {
        foreach (bool l3 in path(Z, Y)) {
          yield return false;
        }
      }
    }
  }
}

gives

eg:path(eg:paris, eg:orleans).
eg:path(eg:paris, eg:chartres).
eg:path(eg:paris, eg:amiens).
eg:path(eg:orleans, eg:blois).
eg:path(eg:orleans, eg:bourges).
eg:path(eg:blois, eg:tours).
eg:path(eg:chartres, eg:lemans).
eg:path(eg:lemans, eg:angers).
eg:path(eg:lemans, eg:tours).
eg:path(eg:angers, eg:nantes).
eg:path(eg:orleans, eg:paris).
eg:path(eg:chartres, eg:paris).
eg:path(eg:amiens, eg:paris).
eg:path(eg:blois, eg:orleans).
eg:path(eg:bourges, eg:orleans).
eg:path(eg:tours, eg:blois).
eg:path(eg:lemans, eg:chartres).
eg:path(eg:angers, eg:lemans).
eg:path(eg:tours, eg:lemans).
eg:path(eg:nantes, eg:angers).
eg:path(eg:paris, eg:blois).
eg:path(eg:paris, eg:bourges).
eg:path(eg:paris, eg:paris).
eg:path(eg:paris, eg:tours).
eg:path(eg:paris, eg:orleans).
eg:path(eg:paris, eg:blois).
eg:path(eg:paris, eg:lemans).
eg:path(eg:paris, eg:orleans).
eg:path(eg:paris, eg:lemans).
eg:path(eg:paris, eg:paris).
eg:path(eg:paris, eg:angers).
eg:path(eg:paris, eg:tours).
eg:path(eg:paris, eg:chartres).
eg:path(eg:paris, eg:nantes).
eg:path(eg:paris, eg:lemans).
eg:path(eg:paris, eg:angers).
eg:path(eg:paris, eg:blois).
eg:path(eg:paris, eg:lemans).
eg:path(eg:paris, eg:paris).
eg:path(eg:orleans, eg:tours).
eg:path(eg:orleans, eg:orleans).
eg:path(eg:orleans, eg:blois).
eg:path(eg:orleans, eg:lemans).
eg:path(eg:orleans, eg:orleans).
eg:path(eg:blois, eg:blois).
eg:path(eg:blois, eg:lemans).
eg:path(eg:chartres, eg:angers).
eg:path(eg:chartres, eg:tours).
eg:path(eg:chartres, eg:chartres).
eg:path(eg:chartres, eg:nantes).
eg:path(eg:chartres, eg:lemans).
eg:path(eg:chartres, eg:angers).
eg:path(eg:chartres, eg:blois).
eg:path(eg:chartres, eg:lemans).
eg:path(eg:lemans, eg:nantes).
eg:path(eg:lemans, eg:lemans).
eg:path(eg:lemans, eg:angers).
eg:path(eg:lemans, eg:blois).
eg:path(eg:lemans, eg:lemans).
eg:path(eg:angers, eg:angers).

which concurs with Yap Prolog result
and speed is similar; waw!

and is similar result for js and python code

Received on Wednesday, 28 March 2007 23:51:12 UTC