One advantage of using Common Lisp is the macro facility that allow a user to customize and extend the basic functions of the language.
Also, one disadavantage of using Common Lisp is the macro facility that allow a user to customize and extend the basic functions of the language.
An instance of the nature of duality is that the opposite of a Great Truth is also a Great Truth. (Wolfgang Pauli)
The following Scheme-like macros in the new CIL Toolkit make the coding a bit easier for me. They might also help Schemers upgrade!
Do they make things clearer? You decide.
Code: Select all
;;; Handy predicate macros
(defmacro eq? (my-form0 my-form1) `(eq ,my-form0 ,my-form1))
(defmacro neq? (my-form0 my-form1) `(not (eq ,my-form0 ,my-form1)))
(defmacro atom? (my-form) `(atom ,my-form))
(defmacro list? (my-form) `(listp ,my-form))
(defmacro zero? (my-integer) `(zerop ,my-integer))
(defmacro nonzero? (my-integer) `(not (zerop ,my-integer)))
(defmacro positive? (my-integer) `(plusp ,my-integer))
(defmacro negative? (my-integer) `(minusp ,my-integer))
(defmacro nonpositive? (my-integer) `(not (plusp ,my-integer)))
(defmacro nonnegative? (my-integer) `(not (minusp ,my-integer)))
(defmacro one? (my-integer) `(= ,my-integer 1))
(defmacro two? (my-integer) `(= ,my-integer 2))
(defmacro even? (my-integer) `(evenp ,my-integer))
(defmacro odd? (my-integer) `(oddp ,my-integer))
(defmacro null? (my-form) `(null ,my-form))
(defmacro end? (my-form) `(endp ,my-form))
(defmacro numeric? (my-form) `(numberp ,my-form))
(defmacro rational? (my-form) `(rationalp ,my-form))
(defmacro integer? (my-form) `(integerp ,my-form))
(defmacro float? (my-form) `(floatp ,my-form))
(defmacro plural? (my-integer) `(> ,my-integer 1))
(defmacro bit? (my-bit-index my-integer) `(logbitp ,my-bit-index ,my-integer))
;;; Shifting macros
(defmacro 2* (my-integer) `(ash ,my-integer 1))
(defmacro 2/ (my-integer) `(ash ,my-integer -1))
;;; Single bit mask construction macro
(defmacro 2^ (my-bit-index) `(ash 1 ,my-bit-index))
;;; The dowhile and dountil indefinite iteration macros
(defmacro dowhile (my-form &body my-body)
"Construct an indefinite iteration loop; positive sense."
`(do () ((not ,my-form)) ,@my-body))
(defmacro dountil (my-form &body my-body)
"Construct an indefinite iteration loop; negative sense."
`(do () (,my-form) ,@my-body))