return argument is optional and assoc uses non local exit
authorDavid Vazquez <davazp@gmail.com>
Tue, 8 Jan 2013 19:29:20 +0000 (19:29 +0000)
committerDavid Vazquez <davazp@gmail.com>
Tue, 8 Jan 2013 19:29:20 +0000 (19:29 +0000)
ecmalisp.lisp

index 51187e6..3033203 100644 (file)
@@ -71,7 +71,7 @@
  (defun null (x)
    (eq x nil))
 
- (defmacro return (value)
+ (defmacro return (&optional value)
    `(return-from nil ,value))
 
  (defmacro while (condition &body body)
       t))
 
   (defun assoc (x alist)
-    (let ((found nil))
-      (while (and alist (not found))
-        (if (eql x (caar alist))
-            (setq found t)
-            (setq alist (cdr alist))))
-      (car alist)))
+    (while alist
+      (if (eql x (caar alist))
+          (return)
+          (setq alist (cdr alist))))
+    (car alist))
 
   (defun string= (s1 s2)
     (equal s1 s2)))