From 50137bf0fa707318c821c20c0ffd243b309c7272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20V=C3=A1zquez?= Date: Wed, 10 Feb 2010 02:06:58 +0100 Subject: [PATCH] Simplify `define-transitive-relation'. --- utils.lisp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/utils.lisp b/utils.lisp index 25967aa..2344fe0 100644 --- a/utils.lisp +++ b/utils.lisp @@ -58,14 +58,11 @@ (defmacro define-transitive-relation (name (arg1 arg2) &body body) - (with-gensyms (argsvar i) + (with-gensyms (argsvar) `(defun ,name (&rest ,argsvar) - (do ((,i ,argsvar (cdr ,i))) - ((null (cdr ,i)) t) - (let ((,arg1 (first ,i)) - (,arg2 (second ,i))) - (or (block nil ,@body) - (return nil))))))) + (loop for (,arg1 ,arg2) on ,argsvar + while ,arg2 + always (block nil ,@body))))) (defun strip-if (func seq &rest rest &key &allow-other-keys) (subseq seq 0 (apply #'position-if func seq rest))) @@ -98,4 +95,5 @@ do (error "Character ~w is not expected." ch) do (write-char (read-char stream) out))))) + ;;; utils.lisp ends here