Beispiel #1
0
        public override ATerm make(ArrayList args)
        {
            if (first == null)
            {
                return(this);
            }

            ATerm     head = first.make(args);
            ATermList tail = (ATermList)next.make(args);

            if (isListPlaceHolder(first))
            {
                /*
                 * this is to solve the make([<list>],[]) problem
                 * the result should be [] and not [[]]
                 * to be compatible with the C version
                 */
                return(head);
            }
            else
            {
                return(tail.insert(head));
            }
        }
        public override ATerm make(ArrayList args)
        {
            PureFactory factory = getPureFactory();
            ATermAppl   appl;
            AFun        fun;
            string      name;

            appl = (ATermAppl)type;
            fun  = appl.getAFun();
            name = fun.getName();
            if (!fun.isQuoted())
            {
                if (fun.getArity() == 0)
                {
                    if (name.Equals("term"))
                    {
                        ATerm t = (ATerm)args[0];
                        args.RemoveAt(0);

                        return(t);
                    }
                    else if (name.Equals("list"))
                    {
                        ATermList l = (ATermList)args[0];
                        args.RemoveAt(0);

                        return(l);
                    }
                    else if (name.Equals("bool"))
                    {
                        bool b = (bool)args[0];
                        args.RemoveAt(0);

                        return(factory.makeAppl(factory.makeAFun(b.ToString(), 0, false)));
                    }
                    else if (name.Equals("int"))
                    {
                        int i = (int)args[0];
                        args.RemoveAt(0);

                        return(factory.makeInt(i));
                    }
                    else if (name.Equals("real"))
                    {
                        double d = (double)args[0];
                        args.RemoveAt(0);

                        return(factory.makeReal(d));
                    }
                    else if (name.Equals("placeholder"))
                    {
                        ATerm atype = (ATerm)args[0];
                        args.RemoveAt(0);
                        return(factory.makePlaceholder(atype));
                    }
                    else if (name.Equals("str"))
                    {
                        string str = (string)args[0];
                        args.RemoveAt(0);
                        return(factory.makeAppl(factory.makeAFun(str, 0, true)));
                    }
                    else if (name.Equals("id"))
                    {
                        string str = (string)args[0];
                        args.RemoveAt(0);
                        return(factory.makeAppl(factory.makeAFun(str, 0, false)));
                    }
                    else if (name.Equals("fun"))
                    {
                        string str = (string)args[0];
                        args.RemoveAt(0);
                        return(factory.makeAppl(factory.makeAFun(str, 0, false)));
                    }
                }
                if (name.Equals("appl"))
                {
                    ATermList oldargs = appl.getArguments();
                    string    newname = (string)args[0];
                    args.RemoveAt(0);
                    ATermList newargs = (ATermList)oldargs.make(args);
                    AFun      newfun  = factory.makeAFun(newname, newargs.getLength(), false);
                    return(factory.makeApplList(newfun, newargs));
                }
            }
            throw new Exception("illegal pattern: " + this);
        }