예제 #1
0
        public virtual ATermList getSlice(int start, int end)
        {
            int       i, size = end - start;
            ATermList result = ((PureFactory)getFactory()).getEmpty();
            ATermList list;

            ArrayList buffer = new ArrayList(size);

            list = this;
            for (i = 0; i < start; i++)
            {
                list = list.getNext();
            }

            for (i = 0; i < size; i++)
            {
                buffer.Add(list.getFirst());
                list = list.getNext();
            }

            for (--i; i >= 0; i--)
            {
                result = result.insert((ATerm)buffer[i]);
            }

            return(result);
        }
예제 #2
0
        public virtual ATermList getArguments()
        {
            ATermList result = ((PureFactory)getFactory()).getEmpty();

            for (int i = args.Length - 1; i >= 0; i--)
            {
                result = result.insert(args[i]);
            }
            return(result);
        }
예제 #3
0
        public virtual ATermList reverse()
        {
            ATermList cur     = this;
            ATermList reverse = this.getEmpty();

            while (!cur.isEmpty())
            {
                reverse = reverse.insert(cur.getFirst());
                cur     = cur.getNext();
            }
            return(reverse);
        }
예제 #4
0
        public virtual ATermList concat(ATermList rhs)
        {
            if (isEmpty())
            {
                return(rhs);
            }

            if (next.isEmpty())
            {
                return(rhs.insert(first));
            }

            return(next.concat(rhs).insert(first));
        }
예제 #5
0
        public virtual ATermList removeAll(ATerm el)
        {
            if (first == el)
            {
                return(next.removeAll(el));
            }

            ATermList result = next.removeAll(el);

            if (result == next)
            {
                return(this);
            }

            return(result.insert((ATerm)first));
        }
예제 #6
0
        internal virtual bool matchArguments(ATerm[] pattern_args, ArrayList list)
        {
            for (int i = 0; i < args.Length; i++)
            {
                if (i >= pattern_args.Length)
                {
                    return(false);
                }

                ATerm arg         = args[i];
                ATerm pattern_arg = pattern_args[i];

                if (pattern_arg.getType() == ATermType.PLACEHOLDER)
                {
                    ATerm ph_type = ((ATermPlaceholder)pattern_arg).getPlaceholder();
                    if (ph_type.getType() == ATermType.APPL)
                    {
                        ATermAppl appl = (ATermAppl)ph_type;
                        if (appl.getName().Equals("list") && appl.getArguments().isEmpty())
                        {
                            ATermList result = ((PureFactory)getFactory()).getEmpty();
                            for (int j = args.Length - 1; j >= i; j--)
                            {
                                result = result.insert(args[j]);
                            }
                            list.Add(result);
                            return(true);
                        }
                    }
                }

                ArrayList submatches = arg.match(pattern_arg);
                if (submatches == null)
                {
                    return(false);
                }
                list.AddRange(submatches);
            }

            return(args.Length == pattern_args.Length);
        }
예제 #7
0
        public virtual ATermList dictPut(ATerm key, ATerm value)
        {
            ATermList pair;

            if (isEmpty())
            {
                pair = getEmpty().insert(value).insert(key);
                return(getEmpty().insert(pair));
            }

            pair = (ATermList)first;

            if (key.equals(pair.getFirst()))
            {
                pair = getEmpty().insert(value).insert(pair);
                return(next.insert(pair));
            }

            return((ATermList)next.dictPut(key, value).insert(first).setAnnotations(getAnnotations()));
            //return getPureFactory().makeList(first, next.dictPut(key, value), getAnnotations());
        }
예제 #8
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));
            }
        }
예제 #9
0
		public virtual ATermList concat(ATermList rhs) 
		{
			if (isEmpty()) 
			{
				return rhs;
			}

			if (next.isEmpty()) 
			{
				return rhs.insert(first);
			}

			return next.concat(rhs).insert(first);
		}