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 codeReceived on Wednesday, 28 March 2007 23:51:12 GMT
This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 July 2008 08:10:00 GMT