A little Clojure challenge inspired by Let over Lambda.
Write a macro (you can try a function, but it's impossible) that accepts four arguments:
- an expression that returns a number
- something to return if that number's negative
- something to return if that number's zero
- something to return if that number's positive
Here's the signature: (defmacro nif [expr neg zero pos] ...)
To pass my test, the following form should print "pos!" and return "pos.", with no other side effects:
(nif 10
(do (println "Negative!") "negative.")
(do (Thread/sleep 1000000) "zero.")
(do (println "pos!") "pos."))
May the best lisper win!
Perhaps not the most elegant solution, but it should get the job done: