pythononlispの拡張

http://www2s.biglobe.ne.jp/~niitsuma/pythononlispex.html
pythononlispにいくつか関数を追加して以下のようにpythonのグラフ描画機能などが利用できるようにした.

pylabを使ってグラフを書く例は以下

$sudo apt-get install python-matplotlib
$ sbcl
(asdf:operate 'asdf:load-op :cffi) 
(asdf:operate 'asdf:load-op :cl-json) 
#+sbcl (sb-int:set-floating-point-modes :traps '()) ;clisp donot need this 
(asdf:operate 'asdf:load-op :pythononlisp) 
(py::py "print \"Hello from python\"")

(py::pyj "pylab.plot" '(1 2 3 4) '(4 3 2 1))
(py::py "pylab.show()") ;グラフのプロット

その他にもこんな使い方ができるようにした

(print (py::pyj "len" (list 1 5 6 ) ) ) ;3 
(print (py::pyj "range" 2 7)) ;(2 3 4 5 6) 
(py::setvalj "a" (list 2 3 4)) ;lispのデータをpythonの変数aに代入
(py::py "print a") ;[2, 3, 4] ;ちゃんと代入されてるか確認
(print (py::getvalj "a")) ;(2 3 4) ;pythonの変数aをlispのデータとして返す

(py::pyj "numpy.reshape" (list 1 2 3 4 5 6 ) (list 2 3)) ; -> ((1 2 3) (4 5 6))   
(py::pyj "numpy.dot" '((1 2) (3 4)) '((1 2) (3 4)) ) ; -> ((7 10) (15 22))  ;行列の積

sbclから使う場合は

(asdf:operate 'asdf:load-op :pythononlisp)

の前に

(sb-int:set-floating-point-modes :traps '())

しないといけないようだ。

pythononlispはlisp - python間で整数と文字列データしかやりとりできないので、他のデータも送れるように拡張した.

jsonrpcdirectとcl-jsonを最初にインストールする必要がある。lispのcffi経由でpython.soを呼ぶと不明なエラーに遭遇することがあるのでjsonrpcdirectを使う方がいい場合もある。

install

$sudo apt-get install python-simplejson python-numpy
$wget http://www2s.biglobe.ne.jp/%7Eniitsuma/jsonrpcdirect06.tar.gz
$tar zxf jsonrpcdirect06.tar.gz
$cd jsonrpcdirect06
$sudo python setup.py install

$sudo apt-get install cl-cffi
$ sbcl
(require :asdf)
(require :asdf-install)
(sb-int:set-floating-point-modes :traps '()) 
(asdf-install:install "http://www2s.biglobe.ne.jp/~niitsuma/pythononlisp-ex06.tar.gz")