diff --git a/decons.lisp b/decons.lisp index 84333a1..acaeb61 100644 --- a/decons.lisp +++ b/decons.lisp @@ -63,10 +63,12 @@ ;;;; rapply and other recursive stuff (defun rapply (op &rest args) - (if (null (cadr args)) + (if (null (cdr args)) (rcall op (car args)) ;(apply #'rapply (lambda (x) (funcall op (car args) x)) (cdr args)) - (apply #'rapply (rlambda op (car args)) (cdr args)) + ;(apply #'rapply (rlambda op (car args)) (cdr args)) + ;(funcall op (car args) (apply #'rapply op (cdr args))) + (rcall2 op (car args) (apply #'rapply op (cdr args))) )) (defgeneric rcall (op arg) @@ -74,6 +76,12 @@ (:method (op (arg list)) (mapcar (lambda (i) (rcall op i)) arg))) +(defgeneric rcall2 (op arg1 arg2) + (:method (op arg1 arg2) + (rcall (lambda (j) (funcall op arg1 j)) arg2)) + (:method (op (arg1 list) arg2) + (mapcar (lambda (i) (rcall (lambda (j) (funcall op i j)) arg2)) arg1))) + (defgeneric rlambda (op arg) (:method (op arg) (lambda (j) (funcall op arg j))) (:method (op (arg list))