Skip to content

Instantly share code, notes, and snippets.

@jg
Created December 16, 2012 13:55
Show Gist options
  • Save jg/4307503 to your computer and use it in GitHub Desktop.
Save jg/4307503 to your computer and use it in GitHub Desktop.
Lisp macro wizardry
(defmacro diff(expr var)
; (pprint "diff")
; (pprint expr)
; (pprint var)
;(pprint (first expr))
;(pprint (second expr))
;(pprint (third expr))
(cond
; a' = 0
((numberp expr) 0)
; x' = 1, y' = 0
((symbolp expr)
(if (eq expr var) 1 0))
; sum
((equal (first expr) '+) `(list '+ (diff ,(second expr) ,var) (diff ,(third expr) ,var)))
))
(diff (+ a a) c)
(macroexpand '(diff (+ a a) c))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment