OMG A Lisp that runs python
Posted March 30, 2016 at 05:10 PM | categories: lisp, python | tags:
Updated March 31, 2016 at 01:54 PM
For a year now I have struggled with abandoning Python for Lisp. It's complicated, I have used Python for 15 years now, and have a lot of skill and knowledge in it. I have used emacs-lisp for about 5 years now, and have a far bit of skill with it too. They solve really different problems. Between the two, I find I like writing and editing elisp lots better than writing Python, except it lacks the scipy+numpy+matplotlib stack. I looked into Racket and Common Lisp, but they also don't really have that as nicely as Python does at the moment. It hit me earlier today that a Lisp that compiled to Python might be the right middle ground. I had seen this project Hy (http://docs.hylang.org/en/latest/quickstart.html ) earlier, but didn't connect the dots to this.
Let me do that here. First, an obligatory execute function to run org-mode code blocks.
(defun org-babel-execute:hy (body params) (let* ((temporary-file-directory ".") (tempfile (make-temp-file "hy-"))) (with-temp-file tempfile (insert body)) (unwind-protect (shell-command-to-string (format "hy %s" tempfile)) (delete-file tempfile))))
org-babel-execute:hy
Now the basic Hello world example. It looks like lisp.
(print "Hy world")
Hy world
Now for a use that looks like Python:
(import numpy) (setv a (numpy.array [1 2 3])) (setv b (numpy.array [1 2 3])) (print (numpy.dot a b))
14
WHAT!!!!
A simple plot? Surely it can't be so easy…
(import [matplotlib.pyplot :as plt]) (plt.plot [1 2 4 8]) (plt.xlabel "x") (plt.ylabel "y") (plt.savefig "hy-test.png")
2016-03-30 17:09:40.826 Python[94292:d13] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API. 2016-03-30 17:09:40.826 Python[94292:d13] CoreText performance note: Set a breakpoint on CTFontLogSuboptimalRequest to debug.
Wow. I am not sure what the warnings are, I seem to get them on my Mac for some reason. How about solving an equation?
(import [scipy.optimize [fsolve]]) (defn objective [x] (- 2 x)) (print (fsolve objective -1))
[ 2.]
_.-^^---....,,-- _-- --_ < >) | | \._ _./ ```--. . , ; .--''' | | | .-=|| | |=-. `-=#$%&%$#=-' | ; :| _____.,-#%&$@%#&#~,._____ _---~~(~~-_. _{ ) ) , ) -~~- ( ,-' )_ ( `-,_..`., )-- '_,) ( ` _) ( -~( -_ `, } (_- _ ~_-~~~~`, ,' ) <---- My brain right now... `~ -^( __;-,((())) ~~~~ {_ -_(()) `\ } { }
I may not be able to sleep tonight…
Ascii art courtesy of http://chris.com/ascii/index.php?art=people/body%20parts/brains and http://www.ascii-code.com/ascii-art/weapons/explosives.php .
Copyright (C) 2016 by John Kitchin. See the License for information about copying.
Org-mode version = 8.2.10