Esempio n. 1
0
        public override ITerm CApply(Unifier u)
        {
            PlanBodyImpl c;

            if (term == null)
            {
                c        = new PlanBodyImpl();
                c.isTerm = isTerm;
            }
            else
            {
                c = new PlanBodyImpl(formType, term.CApply(u), isTerm);
                if (c.term.IsPlanBody())
                {
                    c.formType = ((IPlanBody)c.term).GetBodyType();
                    c.next     = ((IPlanBody)c.term).GetBodyNext();
                    c.term     = ((IPlanBody)c.term).GetBodyTerm();
                }
            }

            if (next != null)
            {
                c.Add((IPlanBody)next.CApply(u));
            }

            return(c);
        }
Esempio n. 2
0
        /* Tal vez este sea un punto importante donde implementar el clone (no hace falta optar por usar el clone superficial de C# porque aquí se especifica cómo se hace el Clone)
         * public override ITerm Clone()
         * {
         *  return (ITerm)MemberwiseClone();
         * } */

        // En vez de ITerm Clone() voy a poner object Clone()
        public override object Clone()                                                                                    // En vez de devolver IPlanBody podría devolver algo más genérico como ITerm... seguramente necesitaría ambas versiones de Clone, no sé
        {
            PlanBodyImpl c = term == null ? new PlanBodyImpl() : new PlanBodyImpl(formType, (ITerm)term.Clone(), isTerm); // Como uso el Clone de C# lo que clono son object que luego hay que castear...

            c.isTerm = isTerm;
            if (next != null)
            {
                c.SetBodyNext(GetBodyNext().ClonePB());
            }
            return(c);
        }
Esempio n. 3
0
 public bool Add(int index, IPlanBody bl)
 {
     if (index == 0)
     {
         IPlanBody newpb = new PlanBodyImpl(formType, term);
         newpb.SetBodyNext(next);
         Swap(bl);
         next = bl.GetBodyNext();
         GetLastBody().SetBodyNext(newpb);
     }
     else if (next != null)
     {
         next.Add(index - 1, bl);
     }
     else
     {
         next = bl;
     }
     return(true);
 }
Esempio n. 4
0
 public IEnumeratorEnumerator(PlanBodyImpl pbi)
 {
     Current = pbi;
 }