diff --git a/fol.lisp b/fol.lisp index 7e2a8fd..bc93296 100644 --- a/fol.lisp +++ b/fol.lisp @@ -2,11 +2,12 @@ (and (symbolp x) (equal (char (symbol-name x) 0) #\?))) -(defun length-form (form) - (if (> (length form) 0) +(defun length-form (form &optional (n 0)) + (if (not (null form)) (if (atom (car form)) (if (member (car form) '(implies and or equiv)) - (+ 1 (length-form (cdr form))) - (length-form (cdr form))) - (+ (length-form (car form)) (length-form (cdr form)))) - 0)) + (length-form (cdr form) (+ n 1)) + (length-form (cdr form) n)) + (progn (setf n (+ n (length-form (car form)))) + (length-form (cdr form) n))) + n))