/// <summary> /// Sets the function that is used to process a term and produce output. /// </summary> /// <param name="symbolName">This is a string representation of the term name. It could be a string, number, identifier, or the label of a term.</param> /// <param name="">The type of symbol for the symbol name.</param> /// <param name="evaluator">The function used to evaluate the term.</param> public void SetEvaluator(string symbolName, SymbolType symbolType, TermEvaluator evaluator) { var stringIdentifier = _termDatabase.StringMapper.Map(symbolName); if (_termDatabase.CurrentFrame.TermEvaluators.ContainsKey((stringIdentifier, symbolType))) { throw new Exception($"Term evaluator already assigned for {symbolName}, {symbolType}"); } _termDatabase.CurrentFrame.TermEvaluators[(stringIdentifier, symbolType)] = evaluator;
public override void Execute(AbstractMachineState state) { AMProgram program = (AMProgram)state.Program; AbstractTerm X0 = ((AbstractTerm)state["X0"]).Dereference(); AbstractTerm X1 = ((AbstractTerm)state["X1"]).Dereference(); if (TermEvaluator.Evaluate(X0) == TermEvaluator.Evaluate(X1)) { program.Next(); } else { state.Backtrack(); } }
public override void Execute(AbstractMachineState state) { AMProgram program = (AMProgram)state.Program; AbstractTerm X0 = ((AbstractTerm)state["X0"]).Dereference(); AbstractTerm X1 = ((AbstractTerm)state["X1"]).Dereference(); if (X0.Unify(new ConstantTerm(TermEvaluator.Evaluate(X1).ToString()))) { program.Next(); } else { state.Backtrack(); } }
private static void RunTest(string input, string expectedOutput, string termname, SymbolType symbolType, TermEvaluator evaluator) { // Arrange var database = TestUtilities.LoadStatements(input); database.Writer.SetEvaluator(termname, symbolType, evaluator); // Act database.ExecuteRewriteRules(); // Assert var result = database.Reader.ReadCurrentFrame().ToSourceCode(); Assert.True(StringComparer.InvariantCulture.Equals(expectedOutput, result)); }
public void eval(AbstractTerm term, double expected) { Assert.AreEqual(expected, TermEvaluator.Evaluate(term)); }