From 47f123e71a7d99ce6cab2e5f696f37b867209ea9 Mon Sep 17 00:00:00 2001 From: Jonas De Vuyst Date: Fri, 2 Jan 2015 16:17:20 +0100 Subject: [PATCH] Added print-and and print-or. --- src/print/foo.clj | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/print/foo.clj b/src/print/foo.clj index 13d85bc..64bf346 100644 --- a/src/print/foo.clj +++ b/src/print/foo.clj @@ -74,6 +74,18 @@ seconds))) (print-and-return "let result: " (do ~@body))))) +(defmacro print-and + "Diagnostic tool for printing the values at each step of an `and`" + [& body] + (cons 'and (for [expr body] + `(print-and-return '~expr " " ~expr)))) + +(defmacro print-or + "Diagnostic tool for printing the values at each step of an `or`" + [& body] + (cons 'or (for [expr body] + `(print-and-return '~expr " " ~expr)))) + (defmacro print-if "Diagnostic tool for printing the values at each step of an `if`" [test expr1 expr2] @@ -206,6 +218,12 @@ (map parse-item bdg-vals))) ~@(map parse-item body)))) +(defmethod parse-list 'and [[_ & args]] + `(print-and ~@(map parse-item args))) + +(defmethod parse-list 'or [[_ & args]] + `(print-or ~@(map parse-item args))) + (defmethod parse-list 'if [[_ & args]] `(print-if ~@(map parse-item args)))