(defun GetFirstTrue (ruleset row &optional (prune nil)) (if (funcall (RDRule-fn ruleset) row) (progn (let ((lst (RDRule-results ruleset))) (let ((true-true (first lst)) (true-false (second lst)) (false-true (third lst))) (cond ((and (equal 'true (RDRule-class ruleset)) (equal 'true (eg-class row))) (incf true-true)) ((and (equal 'true (RDRule-class ruleset)) (equal 'false (eg-class row))) (incf true-false)) ((and (equal 'false (RDRule-class ruleset)) (equal 'true (eg-class row))) (incf false-true))) (setf (RDRule-results ruleset) (list true-true true-false false-true)))) (RDRule-class ruleset)) (GetFirstTrue (RDRule-parent ruleset) row prune))) ;(deftest test-GetFirstTrue () ; (check ; (= 1 (GetFirstTrue (make-RDRule :fn #'(lambda (x) (not (null x))) :class 1 :parent nil) (first (table-rows (titanic)))))))