git.fiddlerwoaroof.com
Browse code

feat: add default return value to applicable-when

Edward Langley authored on 15/07/2023 17:18:21
Showing 2 changed files
... ...
@@ -115,11 +115,16 @@
115 115
     (<= (length it)
116 116
         len)))
117 117
 
118
-(defun applicable-when (fun test)
119
-  (lambda (it)
120
-    (if (funcall test it)
121
-        (funcall fun it)
122
-        it)))
118
+(defun applicable-when (fun test &optional (default nil default-p))
119
+  (if default-p
120
+      (lambda (it)
121
+        (if (funcall test it)
122
+            (funcall fun it)
123
+            default))
124
+      (lambda (it)
125
+        (if (funcall test it)
126
+            (funcall fun it)
127
+            it))))
123 128
 
124 129
 (defmacro conj (&rest fns)
125 130
   (let ((dat (gensym "dat")))
... ...
@@ -84,6 +84,9 @@
84 84
   (5am:is (equal 1
85 85
                  (funcall (data-lens:applicable-when '1+ (constantly nil))
86 86
                           1)))
87
+  (5am:is (equal "hi"
88
+                 (funcall (data-lens:applicable-when '1+ (constantly nil) "hi")
89
+                          1)))
87 90
   (5am:is (equal 2
88 91
                  (funcall (data-lens:applicable-when '1+ (constantly t))
89 92
                           1))))