/// <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;
Ejemplo n.º 2
0
        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();
            }
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 5
0
 public void eval(AbstractTerm term, double expected)
 {
     Assert.AreEqual(expected, TermEvaluator.Evaluate(term));
 }