static Map matchCondition_first(Lisp condition, Map m) { L facts = lispTruth(); O evaluator = getLispEvaluator(condition.head); if (evaluator != null) ret isTrue(callF(evaluator, lispReplaceVars(condition, m))) ? m : null; L> candidates = new L; for (Lisp fact : facts) { Map m2 = cloneMap(m); if (lispMatchIC_xyzVars_sub(condition, fact, m2)) ret m2; } null; }