((Pythonで) 書く(Lisp) インタプリンタ) というやつをpython3でとりあえず動かす
タイトルの通り. やってみたら以外とあっさりPython3対応できた
元ネタは以下の記事
Python3対応自体も既出のネタかもしれないが、書いてしまったので公開する
環境準備
適当にPyhton3のインタプリンタを持ってくる.
自分はDockerを使って、python3.6.0
の環境を入手した
下準備
lis.py
がpython2のインタプリンタでは走るようになっていると思う.
まず、おもむろに
以下を先頭に
#! /usr/bin/env python
以下を最後尾に
if __name__ == "__main__": repl()
そして、lis.py に実行権限をつける
# chmod +x lis.py
手順
基本的にはpython2からpython3で変更されているものを対応をしたら良い
./lis.py
で、最初にエラーが出るのは、
if val is not None: print to_string(val)
python3では、printがステートメントから関数に変わっているエラーなので、 print()
に直す
それを直すと,
AttributeError: module ‘operator’ has no attribute ‘div’
がでてくる。 div
が truediv
と floatdiv
にわかれたらしい。 どちらが正しいとか本来はあると思うが、 ひとまず truediv
を選ぶ
最後が
NameError: name ‘raw_input’ is not defined
というエラーで、標準入力を待ち受ける関数名が input
に変わったとのことなので、そちらに変更する。
以上の3つのエラー対応でとりあえず再び動き始める
本来は必要な残りの作業
テストコードがあれば良いのだが、今回の元ネタにはテストコードがないので、暇があれば実装してPython3対応が正しく完了しているかを確かめたい。