SlideShare a Scribd company logo
1 of 24
Download to read offline
バッテリー強奪!
PythonをCommon Lispから使う
2018-03-27, lisp meetup #63
だれ、おまえ。
TANAKA Shinichi
Common Lisp使い
Nimも好き
twitter: @sin_clav
github: @t-sin
今日の話題
PythonのライブラリをCommon Lispから使う話
Python (1)
いわずと知れたヘビの言語
インデントベースのヒューマンフレンドリーな構文
と言われる
>>> def fib(n):
>>> a, b = 0, 1
>>> while a < n:
>>> print(a, end=' ')
>>> a, b = b, a+b
>>> print()
>>> fib(1000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
Python (2)
いわずと知れたヘビの言語
インデントベースのヒューマンフレンドリーな構文
と言われる
深層学習やらWeb開発やらで人気
膨大な標準ライブラリを持っている
Pythonファンはよく、非同期プロセスからzipファイルの圧縮展開ま
でこなす標準ライブラリを説明するのに、「バッテリー同梱
(batteries included)」というフレーズを良く使います
--- https://www.python.jp/about/
どれくらい バッテリー同梱 なのか?
どれくらい バッテリー同梱 なのか?
re : 正規表現
readline : GNU readlineのラッパ
difflib : テキスト差分
datetime : 日付と日時
zlib , gzip , bz2 : 圧縮
hashlib , hmac , secret : 暗号関連
curses : ターミナル表示制御
html : HTMLのパース・エンティティの操作
urllib : URLを扱う(リクエストも含む)
wave , aifc , ossaudiodev : オーディオ(デバイス)関係
……まだまだあります
いっぽうCommon Lisp
いっぽうCommon Lisp
いろんなライブラリがあるけど…
該当する機能のライブラリがない
古くてパッチを当てないといけない
未完成品
Common Lispあるある
Common Lisperのジレンマ
Pythonのような豊富なライブラリほしい
しかしPythonは書きとうない
S式がいいでござる
ライブラリできるまで、それまで、ただ利用したいだけ
よろしい、ならば強奪だ。
burgled-batteries
https://github.com/jingtaozf/burgled-batteries
burgled-batteries
https://github.com/jingtaozf/burgled-batteries
ただしPython2.xにしか対応していないので…
burgled-batteries3!!!
https://github.com/snmsts/burgled-batteries3
ちなみに、類似プロジェクトとして
Python-on-Lisp
初期の試み。入出力をストリームにマップしたりする
Pyffi
より洗練されたPython-on-Lisp
CLPython: https://github.com/metawilm/cl-python
Pythonをommon Lispで実装した版!
などがある
使用方法
使用方法 (1)
ロードして…
CL-USER> (ql:quickload :burgled-batteries3)
To load "burgled-batteries3":
Load 1 ASDF system:
burgled-batteries3
; Loading "burgled-batteries3"
...
(:BURGLED-BATTERIES3)
Pythonを初期化して…
CL-USER> (burgled-batteries3:startup-python)
#<CLOSURE (FLET SB-UNIX::RUN-HANDLER :IN SB-SYS:ENABLE-INTERRU
使用方法 (2)
使う
CL-USER> (burgled-batteries3:run "10")
10
CL-USER> (burgled-batteries3:run
"[n for n in range(10)]")
#(0 1 2 3 4 5 6 7 8 9)
CL-USER> (burgled-batteries3:run
"sum([n for n in range(10)])")
45
使う!!!
CL-USER> (burgled-batteries3:run "import sys")
; No value
CL-USER> (burgled-batteries3:run
"sys.getdefaultencoding()")
"utf-8"
(ほしいけど)まだない機能
PythonモジュールをCommon Lispパッケージにマップ
実現するにはいくつか問題が…
イテレータ等いくつかのデータ型のマップ
デモ1: 正規表現
※まっとうなCLerは cl-ppcre を使いましょう
デモ2: AWSのリソースを操作
boto3をインストール済みとする
デモ3: サーバーオーケストレーション
Ansibleをインストール済みとする
というように
いろんなことができるんです。
まとめ
Pythonのバッテリーを強奪し、
膨大な標準ライブラリを利用できた
Python向けのナイスなライブラリを利用できた
より強い統合は、今後に期待

More Related Content

Similar to バッテリー強奪! PythonをCommon Lispから使う

「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46civicpg
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装したt-sin
 
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会虎の穴 開発室
 
2013_kougi6
2013_kougi62013_kougi6
2013_kougi6ytanno
 
Python-Tokai at Nagoya Ruby Meeting 01
Python-Tokai at Nagoya Ruby Meeting 01Python-Tokai at Nagoya Ruby Meeting 01
Python-Tokai at Nagoya Ruby Meeting 01itouakihiro
 
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!Kir Chou
 

Similar to バッテリー強奪! PythonをCommon Lispから使う (12)

「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
 
Stapy#22 LT
Stapy#22 LTStapy#22 LT
Stapy#22 LT
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会
 
2013_kougi6
2013_kougi62013_kougi6
2013_kougi6
 
Python-Tokai at Nagoya Ruby Meeting 01
Python-Tokai at Nagoya Ruby Meeting 01Python-Tokai at Nagoya Ruby Meeting 01
Python-Tokai at Nagoya Ruby Meeting 01
 
Pythonのすすめ
PythonのすすめPythonのすすめ
Pythonのすすめ
 
Django_Fukuoka
Django_FukuokaDjango_Fukuoka
Django_Fukuoka
 
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!
 
Django_fukuoka
Django_fukuokaDjango_fukuoka
Django_fukuoka
 

More from t-sin

続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシンt-sin
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてt-sin
 
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったCommon Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったt-sin
 
Common Lispっぽいものをつくっています
Common LispっぽいものをつくっていますCommon Lispっぽいものをつくっています
Common Lispっぽいものをつくっていますt-sin
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングt-sin
 
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)t-sin
 
Common lispでグラフィックアート
Common lispでグラフィックアートCommon lispでグラフィックアート
Common lispでグラフィックアートt-sin
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたいt-sin
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-t-sin
 

More from t-sin (9)

続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシン
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったCommon Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
 
Common Lispっぽいものをつくっています
Common LispっぽいものをつくっていますCommon Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)
 
Common lispでグラフィックアート
Common lispでグラフィックアートCommon lispでグラフィックアート
Common lispでグラフィックアート
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
 

バッテリー強奪! PythonをCommon Lispから使う