private void AddGoalArgumentVariables(PrologCodeTerm term)
{
// goal(atom).
if(PrologCodeTerm.IsAtom(term))
{
return;
}
// goal(X).
else if(PrologCodeTerm.IsVariable(term))
{
this.Add(((PrologCodeVariable)term).Name, null);
return;
}
// goal([A|B]).
else if(PrologCodeTerm.IsList(term))
{
if(term is PrologCodeNonEmptyList)
{
PrologCodeNonEmptyList list = (PrologCodeNonEmptyList)term;
AddGoalStructArgumentVariables(list.Head);
if (list.Tail is PrologCodeNonEmptyList)
{
AddGoalStructArgumentVariables(list.Tail);
}
else
{
AddGoalStructArgumentVariables(list.Tail);
}
}
}
else if(PrologCodeTerm.IsStruct(term))
{
PrologCodePredicate goal = (PrologCodePredicate)term;
foreach (PrologCodeTerm argument in goal.Arguments)
{
AddGoalStructArgumentVariables(argument);
}
}
}