Axiom.Compiler.Framework.PrologVariableDictionary.AddGoalVariables C# (CSharp) Метод

AddGoalVariables() приватный Метод

private AddGoalVariables ( PrologCodeTerm term ) : void
term Axiom.Compiler.CodeObjectModel.PrologCodeTerm
Результат void
        private void AddGoalVariables(PrologCodeTerm term)
        {
            // no variables to add: predicate/0
            if(PrologCodeTerm.IsAtom(term) || PrologCodeTerm.IsAtomicPredicate(term))
            {
                return;
            }
            // goal is a variable X
            else if(PrologCodeTerm.IsVariable(term))
            {
                _currentArgumentIndex = 0;
                this.Add(((PrologCodeVariable)term).Name,null);
                return;
            }
            // goal is a list, [Term|Term]
            else if(PrologCodeTerm.IsList(term))
            {
                _currentArgumentIndex = 0;
                if(term is PrologCodeNonEmptyList)
                {
                    PrologCodeNonEmptyList list = (PrologCodeNonEmptyList)term;
                    AddGoalArgumentVariables(list.Head);
                    _currentArgumentIndex = 1;
                    if(list.Tail != null)
                    {
                        if(list.Tail is PrologCodeNonEmptyList)
                        {
                            AddGoalArgumentVariables(list.Tail);
                        }
                        else
                        {
                            AddGoalArgumentVariables(list.Tail);
                        }
                    }
                }
            }
            // Goal is a predicate, term(term,...)
            else if(PrologCodeTerm.IsStruct(term))
            {
                _currentArgumentIndex = 0;
                PrologCodePredicate goal = (PrologCodePredicate)term;
                foreach(PrologCodeTerm argument in goal.Arguments)
                {
                    AddGoalArgumentVariables(argument);
                    _currentArgumentIndex++;
                }
            }
        }