/var/log/study

つまり雑記

((Pythonで) 書く(Lisp) インタプリンタ) というやつをpython3でとりあえず動かす

タイトルの通り. やってみたら以外とあっさりPython3対応できた

元ネタは以下の記事

((Pythonで) 書く (Lisp) インタプリタ)

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’

がでてくる。 divtruedivfloatdiv にわかれたらしい。 どちらが正しいとか本来はあると思うが、 ひとまず truediv を選ぶ

最後が

NameError: name ‘raw_input’ is not defined

というエラーで、標準入力を待ち受ける関数名が input に変わったとのことなので、そちらに変更する。

以上の3つのエラー対応でとりあえず再び動き始める

本来は必要な残りの作業

テストコードがあれば良いのだが、今回の元ネタにはテストコードがないので、暇があれば実装してPython3対応が正しく完了しているかを確かめたい。