internal override bool match(ATerm pattern, ArrayList list) { if (this.equals(pattern)) { return(true); } if (pattern.getType() == ATermType.PLACEHOLDER) { ATerm type = ((ATermPlaceholder)pattern).getPlaceholder(); if (type.getType() == ATermType.APPL) { ATermAppl appl = (ATermAppl)type; AFun afun = appl.getAFun(); if (afun.getName().Equals("blob") && afun.getArity() == 0 && !afun.isQuoted()) { list.Add(data); return(true); } } } return(base.match(pattern, list)); }
/* public final static void main(String[] args) { TestFib t = new TestFib(new PureFactory()); t.test1(); t.test2(); t.test3(15); } */ public TestFib(ATermFactory factory) { this.factory = factory; zero = factory.makeAFun("zero", 0, false); suc = factory.makeAFun("suc", 1, false); plus = factory.makeAFun("plus", 2, false); fib = factory.makeAFun("fib", 1, false); tzero = factory.makeAppl(zero); }
/* public final static void main(String[] args) * { * TestFib t = new TestFib(new PureFactory()); * * t.test1(); * t.test2(); * t.test3(15); * } */ public TestFib(ATermFactory factory) { this.factory = factory; zero = factory.makeAFun("zero", 0, false); suc = factory.makeAFun("suc", 1, false); plus = factory.makeAFun("plus", 2, false); fib = factory.makeAFun("fib", 1, false); tzero = factory.makeAppl(zero); }
public virtual void TestFib3(int n) { ATermAppl N = tzero; for (int i = 0; i < n; i++) { N = factory.makeAppl(suc, N); } normalizeFib(factory.makeAppl(fib, N)); }
internal override bool match(ATerm pattern, ArrayList list) { if (pattern.getType() == ATermType.APPL) { ATermAppl appl = (ATermAppl)pattern; if (fun.equals(appl.getAFun())) { return(matchArguments(appl.getArgumentArray(), list)); } else { return(false); } } if (pattern.getType() == ATermType.PLACEHOLDER) { ATerm type = ((ATermPlaceholder)pattern).getPlaceholder(); if (type.getType() == ATermType.APPL) { ATermAppl appl = (ATermAppl)type; AFun afun = appl.getAFun(); if (afun.getName().Equals("appl") && !afun.isQuoted()) { list.Add(fun.getName()); return(matchArguments(appl.getArgumentArray(), list)); } else if (afun.getName().Equals("str") && !afun.isQuoted()) { if (fun.isQuoted()) { list.Add(fun.getName()); return(matchArguments(appl.getArgumentArray(), list)); } } else if (afun.getName().Equals("fun") && !afun.isQuoted()) { if (!fun.isQuoted()) { list.Add(fun.getName()); return(matchArguments(appl.getArgumentArray(), list)); } } else if (afun.getName().Equals("id") && !afun.isQuoted()) { if (!fun.isQuoted()) { list.Add(fun.getName()); return(matchArguments(appl.getArgumentArray(), list)); } } } } return(base.match(pattern, list)); }
/* * public final static void main(String[] args) * { * TestFibInterpreted t = new TestFibInterpreted(new PureFactory()); * * t.initRules(); * t.test1(5); * } */ public TestFibInterpreted(ATermFactory factory) { this.factory = factory; zero = factory.makeAFun("zero", 0, false); suc = factory.makeAFun("suc", 1, false); plus = factory.makeAFun("plus", 2, false); fib = factory.makeAFun("fib", 1, false); tzero = factory.makeAppl(zero); fail = factory.parse("fail"); }
/* * public final static void main(String[] args) { TestFibInterpreted t = new TestFibInterpreted(new PureFactory()); t.initRules(); t.test1(5); } */ public TestFibInterpreted(ATermFactory factory) { this.factory = factory; zero = factory.makeAFun("zero", 0, false); suc = factory.makeAFun("suc", 1, false); plus = factory.makeAFun("plus", 2, false); fib = factory.makeAFun("fib", 1, false); tzero = factory.makeAppl(zero); fail = factory.parse("fail"); }
protected override void SetUp() { base.SetUp(); factory = Tester.theFactory; zero = factory.makeAFun("zero", 0, false); suc = factory.makeAFun("suc", 1, false); plus = factory.makeAFun("plus", 2, false); fib = factory.makeAFun("fib", 1, false); tzero = factory.makeAppl(zero); fail = factory.parse("fail"); }
public void test1(int n) { ATermAppl N = tzero; for (int i = 0; i < n; i++) { N = factory.makeAppl(suc, N); } ATerm tfib = factory.makeAppl(fib, N); normalize(tfib); }
internal override bool match(ATerm pattern, ArrayList list) { if (pattern.getType() == ATermType.LIST) { ATermList l = (ATermList)pattern; if (l.isEmpty()) { return(this.isEmpty()); } if (l.getFirst().getType() == ATermType.PLACEHOLDER) { ATerm ph_type = ((ATermPlaceholder)l.getFirst()).getPlaceholder(); if (ph_type.getType() == ATermType.APPL) { ATermAppl appl = (ATermAppl)ph_type; if (appl.getName().Equals("list") && appl.getArguments().isEmpty()) { list.Add(this); return(true); } } } if (!isEmpty()) { ArrayList submatches = first.match(l.getFirst()); if (submatches == null) { return(false); } list.AddRange(submatches); submatches = next.match(l.getNext()); if (submatches == null) { return(false); } list.AddRange(submatches); return(true); } else { return(l.isEmpty()); } } return(base.match(pattern, list)); }
public virtual void TestFibInterpreted(int n) { initRules(); ATermAppl N = tzero; for (int i = 0; i < n; i++) { N = factory.makeAppl(suc, N); } ATerm tfib = factory.makeAppl(fib, N); normalize(tfib); }
public virtual void testMakeAppl() { factory = Tester.theFactory; AFun[] symmies = new AFun[4]; ATermAppl[] apples = new ATermAppl[16]; symmies[0] = factory.makeAFun("f0", 0, false); symmies[1] = factory.makeAFun("f1", 1, false); symmies[2] = factory.makeAFun("f6", 6, false); symmies[3] = factory.makeAFun("f10", 10, false); apples[0] = factory.makeAppl(symmies[0]); apples[1] = factory.makeAppl(symmies[1], (ATerm)apples[0]); apples[2] = factory.makeAppl(symmies[1], (ATerm)apples[1]); apples[3] = factory.makeAppl(symmies[1], (ATerm)apples[0]); apples[4] = factory.makeAppl(symmies[2], new ATerm[] { (ATerm)apples[0], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[0], (ATerm)apples[1] }); apples[5] = factory.makeAppl(symmies[3], new ATerm[] { (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1] }); apples[6] = (ATermAppl)apples[2].setArgument((ATerm)apples[0], 0); ATerm[] args = { apples[0], apples[1], apples[0], apples[1], apples[0], apples[1], apples[0], apples[1], apples[0], apples[1] }; apples[7] = factory.makeAppl(symmies[3], args); AssertTrue(factory.makeAppl(symmies[0]) == apples[0]); AssertTrue(factory.makeAppl(symmies[1], (ATerm)apples[0]) == apples[1]); AssertTrue(apples[6].isEqual(apples[1])); AssertTrue(apples[1].isEqual(apples[3])); AssertTrue(!apples[2].isEqual(apples[1])); AssertTrue(!apples[2].isEqual(apples[6])); AssertTrue(!apples[1].isEqual(apples[2])); AssertTrue(!apples[2].isEqual(apples[3])); AssertTrue(!apples[0].isEqual(apples[1])); // Console.Out.WriteLine("pass: testMakeAppl"); }
public virtual void testMakeAppl() { factory = Tester.theFactory; AFun[] symmies = new AFun[4]; ATermAppl[] apples = new ATermAppl[16]; symmies[0] = factory.makeAFun("f0", 0, false); symmies[1] = factory.makeAFun("f1", 1, false); symmies[2] = factory.makeAFun("f6", 6, false); symmies[3] = factory.makeAFun("f10", 10, false); apples[0] = factory.makeAppl(symmies[0]); apples[1] = factory.makeAppl(symmies[1], (ATerm)apples[0]); apples[2] = factory.makeAppl(symmies[1], (ATerm)apples[1]); apples[3] = factory.makeAppl(symmies[1], (ATerm)apples[0]); apples[4] = factory.makeAppl(symmies[2], new ATerm[] {(ATerm)apples[0], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[0], (ATerm)apples[1]}); apples[5] = factory.makeAppl(symmies[3], new ATerm[] {(ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1]}); apples[6] = (ATermAppl)apples[2].setArgument((ATerm)apples[0], 0); ATerm[] args = { apples[0], apples[1], apples[0], apples[1], apples[0], apples[1], apples[0], apples[1], apples[0], apples[1] }; apples[7] = factory.makeAppl(symmies[3], args); AssertTrue(factory.makeAppl(symmies[0]) == apples[0]); AssertTrue(factory.makeAppl(symmies[1], (ATerm) apples[0]) == apples[1]); AssertTrue(apples[6].isEqual(apples[1])); AssertTrue(apples[1].isEqual(apples[3])); AssertTrue(!apples[2].isEqual(apples[1])); AssertTrue(!apples[2].isEqual(apples[6])); AssertTrue(!apples[1].isEqual(apples[2])); AssertTrue(!apples[2].isEqual(apples[3])); AssertTrue(!apples[0].isEqual(apples[1])); // Console.Out.WriteLine("pass: testMakeAppl"); }
private bool isListPlaceHolder(ATerm pattern) { if (pattern.getType() == ATermType.PLACEHOLDER) { ATerm type = ((ATermPlaceholder)pattern).getPlaceholder(); if (type.getType() == ATermType.APPL) { ATermAppl appl = (ATermAppl)type; AFun afun = appl.getAFun(); if (afun.getName().Equals("list") && afun.getArity() == 0 && !afun.isQuoted()) { return(true); } } } return(false); }
internal virtual bool match(ATerm pattern, ArrayList list) { if (pattern.getType() == ATermType.PLACEHOLDER) { ATerm type = ((ATermPlaceholder)pattern).getPlaceholder(); if (type.getType() == ATermType.APPL) { ATermAppl appl = (ATermAppl)type; AFun afun = appl.getAFun(); if (afun.getName().Equals("term") && afun.getArity() == 0 && !afun.isQuoted()) { list.Add(this); return(true); } } } return(false); }
public override bool equivalent(SharedObject obj) { if (base.equivalent(obj)) { ATermAppl peer = (ATermAppl)obj; if (peer.getAFun().equals(fun)) { for (int i = 0; i < args.Length; i++) { if (!peer.getArgument(i).equals(args[i])) { return(false); } } return(true); } } return(false); }
public virtual ATermAppl normalizeFib(ATermAppl t) { ATermAppl res = t; while (true) { // fib(0) = suc(0) ATermAppl v0 = (ATermAppl)res.getArgument(0); if (v0.getAFun() == zero) { res = factory.makeAppl(suc, v0); break; } // fib(suc(0)) => suc(0) if (v0.getAFun() == suc) { ATermAppl v1 = (ATermAppl)v0.getArgument(0); if (v1.getAFun() == zero) { res = v0; break; } } // fib(s(s(x))) => plus(fib(x),fib(s(x))) // v0 v1 if (v0.getAFun() == suc) { ATermAppl v1 = (ATermAppl)v0.getArgument(0); if (v1.getAFun() == suc) { ATermAppl v2 = (ATermAppl)v1.getArgument(0); ATermAppl fib1 = normalizeFib(factory.makeAppl(fib, v2)); ATermAppl fib2 = normalizeFib(factory.makeAppl(fib, v1)); //System.out.println("adding"); res = normalizePlus(factory.makeAppl(plus, fib1, fib2)); break; } } break; } return(res); }
public void testMakeAppl() { AFun[] symmies = new AFun[4]; ATermAppl[] apples = new ATermAppl[16]; symmies[0] = factory.makeAFun("f0", 0, false); symmies[1] = factory.makeAFun("f1", 1, false); symmies[2] = factory.makeAFun("f6", 6, false); symmies[3] = factory.makeAFun("f10", 10, false); apples[0] = factory.makeAppl(symmies[0]); apples[1] = factory.makeAppl(symmies[1], (ATerm)apples[0]); apples[2] = factory.makeAppl(symmies[1], (ATerm)apples[1]); apples[3] = factory.makeAppl(symmies[1], (ATerm)apples[0]); apples[4] = factory.makeAppl(symmies[2], new ATerm[] { (ATerm)apples[0], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[0], (ATerm)apples[1] }); apples[5] = factory.makeAppl(symmies[3], new ATerm[] { (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1] }); apples[6] = (ATermAppl)apples[2].setArgument((ATerm)apples[0], 0); assertTrue(apples[6].isEqual(apples[1])); assertTrue(apples[1].isEqual(apples[3])); assertTrue(!apples[2].isEqual(apples[1])); assertTrue(!apples[2].isEqual(apples[6])); assertTrue(!apples[1].isEqual(apples[2])); assertTrue(!apples[2].isEqual(apples[3])); assertTrue(!apples[0].isEqual(apples[1])); Console.Out.WriteLine("pass: testMakeAppl"); }
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 override void visitAppl(ATermAppl appl) // throws VisitFailure { AFun fun = appl.getAFun(); string name = fun.ToString(); stream.Write(name); position += name.Length; if (fun.getArity() > 0 || name.Equals("")) { stream.Write('('); position++; for (int i = 0; i < fun.getArity(); i++) { if (i != 0) { stream.Write(','); position++; } visitChild(appl.getArgument(i)); } stream.Write(')'); position++; } }
public virtual void visitAppl(ATermAppl arg) // throws VisitFailure { visitATerm(arg); }
public override void visitAppl(ATermAppl a ) {}
public void testMakeAppl() { AFun[] symmies = new AFun[4]; ATermAppl[] apples = new ATermAppl[16]; symmies[0] = factory.makeAFun("f0", 0, false); symmies[1] = factory.makeAFun("f1", 1, false); symmies[2] = factory.makeAFun("f6", 6, false); symmies[3] = factory.makeAFun("f10", 10, false); apples[0] = factory.makeAppl(symmies[0]); apples[1] = factory.makeAppl(symmies[1], (ATerm)apples[0]); apples[2] = factory.makeAppl(symmies[1], (ATerm)apples[1]); apples[3] = factory.makeAppl(symmies[1], (ATerm)apples[0]); apples[4] = factory.makeAppl(symmies[2], new ATerm[] {(ATerm)apples[0], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[0], (ATerm)apples[1]}); apples[5] = factory.makeAppl(symmies[3], new ATerm[] {(ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1], (ATerm)apples[0], (ATerm)apples[1]}); apples[6] = (ATermAppl)apples[2].setArgument((ATerm)apples[0], 0); assertTrue(apples[6].isEqual(apples[1])); assertTrue(apples[1].isEqual(apples[3])); assertTrue(!apples[2].isEqual(apples[1])); assertTrue(!apples[2].isEqual(apples[6])); assertTrue(!apples[1].isEqual(apples[2])); assertTrue(!apples[2].isEqual(apples[3])); assertTrue(!apples[0].isEqual(apples[1])); Console.Out.WriteLine("pass: testMakeAppl"); }
public override void visitAppl(ATermAppl a) { }
public ATermAppl normalizePlus(ATermAppl t) { ATermAppl res = t; while (true) { ATermAppl v0 = (ATermAppl) res.getArgument(0); // plus(s(s(s(s(s(x))))),y) => plus(x,s(s(s(s(s(y)))))) if (v0.getAFun() == suc) { ATermAppl v1 = (ATermAppl) v0.getArgument(0); if (v1.getAFun() == suc) { ATermAppl v2 = (ATermAppl) v1.getArgument(0); if (v2.getAFun() == suc) { ATermAppl v3 = (ATermAppl) v2.getArgument(0); if (v3.getAFun() == suc) { ATermAppl v4 = (ATermAppl) v3.getArgument(0); if (v4.getAFun() == suc) { res = factory.makeAppl( plus, v4.getArgument(0), factory.makeAppl( suc, factory.makeAppl( suc, factory.makeAppl( suc, factory.makeAppl( suc, factory.makeAppl( suc, res.getArgument(1))))))); continue; } } } } } // plus(0,x) = x if (v0.getAFun() == zero) { res = (ATermAppl) res.getArgument(1); break; } // plus(s(x),y) => plus(x,s(y)) if (v0.getAFun() == suc) { res = factory.makeAppl( plus, v0.getArgument(0), factory.makeAppl(suc, res.getArgument(1))); continue; } break; } return res; }
public ATermAppl normalizeFib(ATermAppl t) { ATermAppl res = t; while (true) { // fib(0) = suc(0) ATermAppl v0 = (ATermAppl) res.getArgument(0); if (v0.getAFun() == zero) { res = factory.makeAppl(suc, v0); break; } // fib(suc(0)) => suc(0) if (v0.getAFun() == suc) { ATermAppl v1 = (ATermAppl) v0.getArgument(0); if (v1.getAFun() == zero) { res = v0; break; } } // fib(s(s(x))) => plus(fib(x),fib(s(x))) // v0 v1 if (v0.getAFun() == suc) { ATermAppl v1 = (ATermAppl) v0.getArgument(0); if (v1.getAFun() == suc) { ATermAppl v2 = (ATermAppl) v1.getArgument(0); ATermAppl fib1 = normalizeFib(factory.makeAppl(fib, v2)); ATermAppl fib2 = normalizeFib(factory.makeAppl(fib, v1)); //System.out.println("adding"); res = normalizePlus(factory.makeAppl(plus, fib1, fib2)); break; } } break; } return res; }
public virtual ATermAppl normalizePlus(ATermAppl t) { ATermAppl res = t; while (true) { ATermAppl v0 = (ATermAppl)res.getArgument(0); // plus(s(s(s(s(s(x))))),y) => plus(x,s(s(s(s(s(y)))))) if (v0.getAFun() == suc) { ATermAppl v1 = (ATermAppl)v0.getArgument(0); if (v1.getAFun() == suc) { ATermAppl v2 = (ATermAppl)v1.getArgument(0); if (v2.getAFun() == suc) { ATermAppl v3 = (ATermAppl)v2.getArgument(0); if (v3.getAFun() == suc) { ATermAppl v4 = (ATermAppl)v3.getArgument(0); if (v4.getAFun() == suc) { res = factory.makeAppl( plus, v4.getArgument(0), factory.makeAppl( suc, factory.makeAppl( suc, factory.makeAppl( suc, factory.makeAppl( suc, factory.makeAppl( suc, res.getArgument(1))))))); continue; } } } } } // plus(0,x) = x if (v0.getAFun() == zero) { res = (ATermAppl)res.getArgument(1); break; } // plus(s(x),y) => plus(x,s(y)) if (v0.getAFun() == suc) { res = factory.makeAppl( plus, v0.getArgument(0), factory.makeAppl(suc, res.getArgument(1))); continue; } break; } return(res); }