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