private void ProcessForeignMethod(PrologCodePredicate p) { // :- foreign(functor(+term,...),'Assembly','Class','MethodName'). PrologCodeMethod foreignMethod = new PrologCodeMethod(); PrologCodePredicate predicateFunctor = (PrologCodePredicate)p.Arguments[0]; // Add argument types foreignMethod.Arguments = GetForeignMethodArguments(predicateFunctor); foreignMethod.AssemblyName = GetAtomOrStringValue((PrologCodeTerm)p.Arguments[1]); foreignMethod.Class = GetAtomOrStringValue((PrologCodeTerm)p.Arguments[2]); foreignMethod.PredicateName = predicateFunctor.Name; foreignMethod.MethodName = predicateFunctor.Name.Replace("'", ""); if (p.Arguments.Count == 4) { foreignMethod.MethodName = GetAtomOrStringValue((PrologCodeTerm)p.Arguments[3]); } // Add the method _codeUnit.Methods.Add(foreignMethod); }