public HornClause(Attribute head, string prologCode) { this.head = head; this.body = null; this.prologCode = prologCode; clause = null; }
/// <summary> /// Constructeur d'une clause de Horn. /// </summary> /// <param name="head"> Prédicat de tête de clause.</param> /// <param name="body"> Liste de prédicats de corps de clause.</param> public HornClause(Attribute head, Attribute[] body) { this.head = head; this.body = body; prologCode = null; clause = null; }
/// <summary> /// Traduit le code Prolog d'une clause de Horn en fonction en C# et l'exécute à partir des prédicats contenus dans la base de données. /// A utiliser uniquement dans un nouveau <see cref="AppDomain"/> sous peine de fuite de mémoire. /// </summary> /// <returns> Un objet <see cref="YP.IClause"/>, qui peut être manipulé pour obtenir une liste de concordance <see cref="IEnumerable{bool}"/> de la clause par rapport aux prédicats dans la base de données. </returns> public void YPwriteAndCompile() { string codeToCorrect; using (StringWriter sw = new StringWriter()) { //Console.WriteLine("// Compiled code:" + ToPrologCode()); YP.tell(sw); YP.see(new StringReader(ToPrologCode())); Variable TermList = new Variable(); Variable PseudoCode = new Variable(); foreach (bool l1 in Parser.parseInput(TermList)) { foreach (bool l2 in Compiler.makeFunctionPseudoCode (TermList, PseudoCode)) { Compiler.convertFunctionCSharp(PseudoCode); } } YP.seen(); codeToCorrect = sw.ToString(); } StringBuilder sb = new StringBuilder(codeToCorrect); sb.Remove(0, 115); int i = 0; while (!sb.ToString().ToCharArray()[i].Equals('(')) { i++; } sb.Remove(0, i); sb.Insert(0, "public static IEnumerable<bool> function"); sb.Replace(head.name, "function"); string finalCode = sb.ToString(); clause = Compiler.compileAnonymousFunction(finalCode, head.arity, null); }