!7 sclass Logic { new L assumptions; new L parsedAssumptions; void assume(S s) { assumptions.add(s); parsedAssumptions.add(assertNotNull(parse(s))); } void verifyCalculator(S concept, O calc) { for (Lisp a : parsedAssumptions) if (a.headIs(concept)) print("Checking " + a); } } static Lisp parse(S s) { L tok = tok_groupRoundBrackets(s); printStructure(tok); if (l(tok) == 1) null; Lisp l = lisp(unquote(tok.get(1))); for (int i = 3; i < l(tok); i += 2) { S t = tok.get(i); if (t.startsWith("(") && t.endsWith(")")) l.add(assertNotNull(parse(dropFirstAndLast(t)))); else l.add(lisp(unquote(t))); } ret l; } p { new Logic l; l.assume("iwuamaiejhsykake (vjyukwvgqzhfcxme HELLO) 1"); l.assume("iwuamaiejhsykake (vjyukwvgqzhfcxme HELLO, vjyukwvgqzhfcxme WORLD) 2"); psl(l.parsedAssumptions); l.verifyCalculator("iwuamaiejhsykake", func(S s) { l(tokSplitAtComma(s)) }); }