diff --git a/README.md b/README.md index 35bf929..3b89a12 100644 --- a/README.md +++ b/README.md @@ -1663,17 +1663,21 @@ Convenient versions of `let` and `let*` constructs combined with flow control. If `val` evaluates to non-nil, bind it to `var` and execute body. `var-val` should be a (`var` `val`) pair. +Note: binding is done according to `-let`. + ```cl (-when-let (match-index (string-match "d" "abcd")) (+ match-index 2)) ;; => 5 -(--when-let (member :b '(:a :b :c)) (cons :d it)) ;; => '(:d :b :c) -(--when-let (even? 3) (cat it :a)) ;; => nil +(-when-let ((&plist :foo foo) (list :foo "foo")) foo) ;; => "foo" +(-when-let ((&plist :foo foo) (list :bar "bar")) foo) ;; => nil ``` #### -when-let* `(vars-vals &rest body)` If all `vals` evaluate to true, bind them to their corresponding `vars` and execute body. `vars-vals` should be a list of (`var` `val`) -pairs (corresponding to bindings of `let*`). +pairs. + +Note: binding is done according to `-let`. ```cl (-when-let* ((x 5) (y 3) (z (+ y 4))) (+ x y z)) ;; => 15 @@ -1685,6 +1689,8 @@ pairs (corresponding to bindings of `let*`). If `val` evaluates to non-nil, bind it to `var` and do `then`, otherwise do `else`. `var-val` should be a (`var` `val`) pair. +Note: binding is done according to `-let`. + ```cl (-if-let (match-index (string-match "d" "abc")) (+ match-index 3) 7) ;; => 7 (--if-let (even? 4) it nil) ;; => t @@ -1694,11 +1700,14 @@ otherwise do `else`. `var-val` should be a (`var` `val`) pair. If all `vals` evaluate to true, bind them to their corresponding `vars` and do `then`, otherwise do `else`. `vars-vals` should be a list -of (`var` `val`) pairs (corresponding to the bindings of `let*`). +of (`var` `val`) pairs. + +Note: binding is done according to `-let`. ```cl (-if-let* ((x 5) (y 3) (z 7)) (+ x y z) "foo") ;; => 15 (-if-let* ((x 5) (y nil) (z 7)) (+ x y z) "foo") ;; => "foo" +(-if-let* (((_ _ x) '(nil nil 7))) x) ;; => 7 ``` #### -let `(varlist &rest body)`