public static void Rule(Term lhs, Atom atom, OptionalTermBody optionalTermBody) { CodeCompoundTerm codeCompoundTerm; if (optionalTermBody.CodeTerms == null) { CodeFunctor codeFunctor = new CodeFunctor(atom.Text); codeCompoundTerm = new CodeCompoundTerm(codeFunctor); } else { CodeFunctor codeFunctor = new CodeFunctor(atom.Text, optionalTermBody.CodeTerms.Count); if (codeFunctor.Arity == 0) { codeCompoundTerm = new CodeCompoundTerm(codeFunctor); } else { codeCompoundTerm = new CodeCompoundTerm(codeFunctor, optionalTermBody.CodeTerms); } } lhs.CodeCompoundTerm = codeCompoundTerm; }
private void Call(CodeFunctor codeFunctor, LibraryList libraries) { Functor functor = Functor.Create(codeFunctor); if (functor == Functor.CutFunctor) { InstructionStreamBuilder.Write(new WamInstruction(WamInstructionOpCodes.Cut)); } else if (libraries.Contains(functor)) { InstructionStreamBuilder.Write(new WamInstruction(WamInstructionOpCodes.LibraryCall, functor)); } else { InstructionStreamBuilder.Write(new WamInstruction(WamInstructionOpCodes.Call, functor)); } }
private void Execute(CodeFunctor codeFunctor) { Functor functor = Functor.Create(codeFunctor); InstructionStreamBuilder.Write(new WamInstruction(WamInstructionOpCodes.Execute, functor)); }
public static Functor Create(CodeFunctor codeFunctor) { return(new Functor(codeFunctor.Name, codeFunctor.Arity)); }