public void ExternalPredicateReturningMulpipleAnswersTest() { var externalPredicate = new ExternalPredicateDeclaration("externalPredicate", 1); Compiled.Program program = Compiler.Compile(new AST.Program(new AST.Clause [] { }, new [] { externalPredicate })); program.SetExternalPredicateCallbacks( new [] { new KeyValuePair <ExternalPredicateDeclaration, ExternalPredicateDefinition> (externalPredicate, new SampleExternalPredicate("john", "jane").BindVariables) } ); var goal = Helper.MakeGoal("externalPredicate", "X"); var solutions = Helper.GetSolutions(goal, program).ToArray(); Assert.AreEqual(2, solutions.Length); Assert.AreEqual("john", ((Runtime.Atom)solutions [0] ["X"]).Name); Assert.AreEqual("jane", ((Runtime.Atom)solutions [1] ["X"]).Name); }
public void PrologPredicateCallingExternalPredicateTest() { var externalPredicate = new ExternalPredicateDeclaration("externalPredicate", 1); Compiled.Program program = Compiler.Compile(new AST.Program(new [] { new AST.Clause { Head = Helper.MakeGoal("callExternalPredicate", "X"), Body = new [] { Helper.MakeGoal("externalPredicate", "X") } } }, new [] { externalPredicate })); program.SetExternalPredicateCallbacks( new [] { new KeyValuePair <ExternalPredicateDeclaration, ExternalPredicateDefinition> (externalPredicate, new SampleExternalPredicate("john").BindVariables) } ); var goal = Helper.MakeGoal("callExternalPredicate", "X"); AssertExternalPredicateSolutionIsCorrect(goal, program); }
public void DoesBillLikeIcecream() { // likes (_, icecream). Compiled.Program program = EveryOneLikesIcecream(); // ?- likes (bill, icecream). var goal = new AST.Goal { PredicateName = "likes", Arguments = new IArgument[] { new Atom { Name = "bill" }, new Atom { Name = "icecream" } } }; var solutions = Helper.Solve(goal, program); var solution = solutions.Single(); // a single solution means prolog says 'yes' Assert.IsFalse(solution.Variables.Any()); // no variables in query }
public void WhatDoesBillLike() { // likes (_, icecream). Compiled.Program program = EveryOneLikesIcecream(); // ?- likes (bill, X). var goal = new AST.Goal { PredicateName = "likes", Arguments = new IArgument[] { new Atom { Name = "bill" }, new Variable { Name = "X" } } }; var solutions = Helper.GetSolutions(goal, program); var variables = solutions.Single(); var variable = variables.Single(); Assert.AreEqual("X", variable.Key); Assert.AreEqual("icecream", ((Runtime.Atom)variable.Value).Name); }
private static void AssertExternalPredicateSolutionIsCorrect(AST.Goal goal, Compiled.Program program) { var solutions = Helper.GetSolutions(goal, program); var variables = solutions.Single(); Assert.AreEqual("john", ((Runtime.Atom)variables ["X"]).Name); }
public void UnifyListElementsFails() { Compiled.Program program = GetStarsDatabase(); var goal = Helper.MakeGoal("stars", "[X,Y,Z]"); var solutions = Helper.Solve(goal, program); Assert.IsFalse(solutions.Any()); }
public static IEnumerable <Runtime.ISolutionTreeNode> Solve(Compiled.Program program, out Tracer tracer, params AST.Goal [] goals) { var engine = new Runtime.Engine(); tracer = new Tracer(); //engine.NewGoal += tracer.Engine_NewGoal; //engine.Unified += tracer.Engine_Unified; //engine.Failed += tracer.Engine_Failed; return(Compiler.Solve(engine, goals, program)); }
public void UnifyListElements() { Compiled.Program program = GetStarsDatabase(); var goal = Helper.MakeGoal("stars", "[X,Y]"); var solutions = Helper.GetSolutions(goal, program); var variables = solutions.Single(); Assert.AreEqual("sun", ((Runtime.Atom)variables ["X"]).Name); Assert.AreEqual("sirius", ((Runtime.Atom)variables ["Y"]).Name); }
public void UnifyList() { Compiled.Program program = GetStarsDatabase(); var goal = Helper.MakeGoal("stars", "Xs"); var solutions = Helper.GetSolutions(goal, program); var list = (Runtime.List)solutions.Single().Single().Value; Assert.AreEqual("sun", ((Runtime.Atom)list.First()).Name); Assert.AreEqual("sirius", ((Runtime.Atom)list.Skip(1).First()).Name); }
static void Main(string [] args) { Compiled.Program program = GetProgram(args[0]); var externalPredicates = new [] { Concat.GetConcat(), Lexer.GetLexer(new StringReader("ордена ленина полк")) }; program.SetExternalPredicateCallbacks(externalPredicates); var engine = new EngineInternals(); var events = engine.Run(program); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1(events)); }
public static IEnumerable <Runtime.ISolutionTreeNode> Solve(AST.Goal goal, Compiled.Program program) { return(Compiler.Solve(new Runtime.Engine(), new [] { goal }, program)); }
public static IEnumerable <Dictionary <string, Runtime.IConcreteValue> > GetSolutions(AST.Goal goal, Compiled.Program program) { var solutions = Solve(goal, program); return(solutions.Select(GetTopLevelVariables)); }
public IEnumerable <ISolutionTreeNode> Run(Compiled.Program program) { return(Solve(program.GetStartupGoal())); }
public IEnumerable <IDebugEvent> Run(Compiled.Program program) { return(Solve(program.GetStartupGoal())); }