From 7d8ddd9ecb9f5ddf9a918601b102ec8a4ee2bd35 Mon Sep 17 00:00:00 2001 From: gilch Date: Sun, 9 Aug 2015 01:21:12 -0600 Subject: [PATCH] remove lisp-if / lisp-if-not in favor of lif / lif-not --- docs/language/api.rst | 36 +++++++++-------------- hy/core/macros.hy | 4 +-- tests/native_tests/native_macros.hy | 44 +++++++++++++---------------- 3 files changed, 36 insertions(+), 48 deletions(-) diff --git a/docs/language/api.rst b/docs/language/api.rst index 05d122c..47feb4b 100644 --- a/docs/language/api.rst +++ b/docs/language/api.rst @@ -881,47 +881,39 @@ an empty sequence, and an empty dictionary are considered ``False``; everything else is considered ``True``. -lisp-if / lif and lisp-if-not / lif-not +lif and lif-not --------------------------------------- .. versionadded:: 0.10.0 .. versionadded:: 0.11.0 - lisp-if-not / lif-not + lif-not -For those that prefer a more Lispy ``if`` clause, we have ``lisp-if``, or +For those that prefer a more Lispy ``if`` clause, we have, or ``lif``. This *only* considers ``None`` / ``nil`` to be false! All other "false-ish" Python values are considered true. Conversely, we have -``lisp-if-not`` and ``lif-not`` in parallel to ``if`` and ``if-not`` which +``lif-not`` in parallel to ``if`` and ``if-not`` which reverses the comparison. .. code-block:: clj - => (lisp-if True "true" "false") - "true" - => (lisp-if False "true" "false") - "true" - => (lisp-if 0 "true" "false") - "true" - => (lisp-if nil "true" "false") - "false" - => (lisp-if None "true" "false") - "false" - => (lisp-if-not nil "true" "false") - "true" - => (lisp-if-not None "true" "false") - "true" - => (lisp-if-not False "true" "false") - "false" - - ; Equivalent but shorter => (lif True "true" "false") "true" + => (lif False "true" "false") + "true" + => (lif 0 "true" "false") + "true" => (lif nil "true" "false") "false" + => (lif None "true" "false") + "false" + => (lif-not nil "true" "false") + "true" => (lif-not None "true" "false") "true" + => (lif-not False "true" "false") + "false" import diff --git a/hy/core/macros.hy b/hy/core/macros.hy index 0ba0671..f70f928 100644 --- a/hy/core/macros.hy +++ b/hy/core/macros.hy @@ -149,11 +149,11 @@ `(if (not ~test) ~not-branch ~yes-branch))) -(defmacro-alias [lisp-if lif] [test &rest branches] +(defmacro lif [test &rest branches] "Like `if`, but anything that is not None/nil is considered true." `(if (is-not ~test nil) ~@branches)) -(defmacro-alias [lisp-if-not lif-not] [test &rest branches] +(defmacro lif-not [test &rest branches] "Like `if-not`, but anything that is not None/nil is considered true." `(if (is ~test nil) ~@branches)) diff --git a/tests/native_tests/native_macros.hy b/tests/native_tests/native_macros.hy index 69b349c..36d6291 100644 --- a/tests/native_tests/native_macros.hy +++ b/tests/native_tests/native_macros.hy @@ -188,39 +188,35 @@ :yes))) -(defn test-lisp-if [] - "test that lisp-if works as expected" +(defn test-lif [] + "test that lif works as expected" ; nil is false - (assert (= (lisp-if None "true" "false") "false")) - (assert (= (lisp-if nil "true" "false") "false")) + (assert (= (lif None "true" "false") "false")) + (assert (= (lif nil "true" "false") "false")) ; But everything else is True! Even falsey things. - (assert (= (lisp-if True "true" "false") "true")) - (assert (= (lisp-if False "true" "false") "true")) - (assert (= (lisp-if 0 "true" "false") "true")) - (assert (= (lisp-if "some-string" "true" "false") "true")) - (assert (= (lisp-if "" "true" "false") "true")) - (assert (= (lisp-if (+ 1 2 3) "true" "false") "true")) - - ; Just to be sure, test the alias lif + (assert (= (lif True "true" "false") "true")) + (assert (= (lif False "true" "false") "true")) + (assert (= (lif 0 "true" "false") "true")) + (assert (= (lif "some-string" "true" "false") "true")) + (assert (= (lif "" "true" "false") "true")) + (assert (= (lif (+ 1 2 3) "true" "false") "true")) (assert (= (lif nil "true" "false") "false")) (assert (= (lif 0 "true" "false") "true"))) -(defn test-lisp-if-not [] - "test that lisp-if-not works as expected" +(defn test-lif-not [] + "test that lif-not works as expected" ; nil is false - (assert (= (lisp-if-not None "false" "true") "false")) - (assert (= (lisp-if-not nil "false" "true") "false")) + (assert (= (lif-not None "false" "true") "false")) + (assert (= (lif-not nil "false" "true") "false")) ; But everything else is True! Even falsey things. - (assert (= (lisp-if-not True "false" "true") "true")) - (assert (= (lisp-if-not False "false" "true") "true")) - (assert (= (lisp-if-not 0 "false" "true") "true")) - (assert (= (lisp-if-not "some-string" "false" "true") "true")) - (assert (= (lisp-if-not "" "false" "true") "true")) - (assert (= (lisp-if-not (+ 1 2 3) "false" "true") "true")) - - ; Just to be sure, test the alias lif-not + (assert (= (lif-not True "false" "true") "true")) + (assert (= (lif-not False "false" "true") "true")) + (assert (= (lif-not 0 "false" "true") "true")) + (assert (= (lif-not "some-string" "false" "true") "true")) + (assert (= (lif-not "" "false" "true") "true")) + (assert (= (lif-not (+ 1 2 3) "false" "true") "true")) (assert (= (lif-not nil "false" "true") "false")) (assert (= (lif-not 0 "false" "true") "true")))