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);
        }