private void AddGoalStructArgumentVariables(PrologCodeTerm term)
{
if (PrologCodeTerm.IsAtom(term))
{
return;
}
else if (PrologCodeTerm.IsVariable(term))
{
this.Add(((PrologCodeVariable)term).Name, null);
}
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 structure = (PrologCodePredicate)term;
foreach (PrologCodeTerm argument in structure.Arguments)
{
AddGoalStructArgumentVariables(argument);
}
}
}