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); }
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); }
public virtual ATermList reverse() { ATermList cur = this; ATermList reverse = this.getEmpty(); while (!cur.isEmpty()) { reverse = reverse.insert(cur.getFirst()); cur = cur.getNext(); } return(reverse); }
public virtual ATermList concat(ATermList rhs) { if (isEmpty()) { return(rhs); } if (next.isEmpty()) { return(rhs.insert(first)); } return(next.concat(rhs).insert(first)); }
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)); }
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); }
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()); }
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 virtual ATermList concat(ATermList rhs) { if (isEmpty()) { return rhs; } if (next.isEmpty()) { return rhs.insert(first); } return next.concat(rhs).insert(first); }