Skip to content

Instantly share code, notes, and snippets.

@jballanc
Last active December 29, 2015 09:19
Show Gist options
  • Save jballanc/7649656 to your computer and use it in GitHub Desktop.
Save jballanc/7649656 to your computer and use it in GitHub Desktop.
(ns space-age)
(defn on-earth [seconds]
(/ seconds 31557600.0))
(def orbital-periods
{:mercury 0.2408467
:venus 0.61519726
:mars 1.8808158
:jupiter 11.862615
:saturn 29.447498
:uranus 84.016846
:neptune 164.79132})
(defmacro def-planet [planet period]
`(defn ~(symbol (str "on-" (name planet))) [seconds#]
(/ (on-earth seconds#) ~period)))
(doseq [[planet period] orbital-periods]
(def-planet planet period))
(on-mercury 32000000) ;=> 4.21022...
(ns space-age)
(defn on-earth [seconds]
(/ seconds 31557600.0))
(def orbital-periods
{:mercury 0.2408467
:venus 0.61519726
:mars 1.8808158
:jupiter 11.862615
:saturn 29.447498
:uranus 84.016846
:neptune 164.79132})
(doseq [[planet period] orbital-periods]
(eval `(defn ~(symbol (str "on-" (name planet))) [seconds#]
(/ (on-earth seconds#) ~period))))
(on-mercury 32000000) ;=> 4.21022...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment