lurking / lurking-lisp-library / lurking.lisp

(defmacro op2assign (op)
    (let ((op= (intern (concatenate 'string (string op) "="))))
        `(defmacro ,op= (var . values)
            `(setf ,var (,',op ,var ,@values)))))

(op2assign +)
(op2assign -)
(op2assign *)

;;;(defmacro -= (x y)
;;;  `(incf ,x (- ,y)))
;;;(defmacro *= (x y)
;;;  `(setf ,x (* ,x ,y)))

(defun ~ (&rest lst)
  (apply 'concatenate 'string lst))

(op2assign ~)

;;; Taken from http://p-cos.blogspot.com/2007/02/what-is-point-of-macros.html
;;; Thanks!
(defmacro while (expression &body body)
  `(tagbody
     start (if (not ,expression) (go end))
           ,@body
           (go start)
     end))

;;; (with (var1 value1 var2 value2 var3 value3 ...) macro inspired by Arc.
(defmacro with (vars &body body)
  ;; Convert a flat list to a list of two element lists.
  (defun withify (lst)
    (if (null lst)
      ()
      (cons (list (car lst) (cadr lst)) (withify (cddr lst)))))
  `(let* ,(withify vars) ,@body))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.