lispとrubyとpythonと (REPL)

common lispPythonを比べてみた。
pythonには興味があったし、いい加減MS以外のことをやりたくって。。。
で、、、ついでにRubyも触ってみた。
schemeも触ろうか、と思ったんだけどそこまでは時間がない。

まずはいじるためにemacsとREPLの整備

common lispのREPL

1.emacsを起動
2.*.lispを開く
3.M-x Slime でslime起動
4.C-x 2で画面わけて一つは*.lispもう一つはslime-replにする
5.*.lispに色々と書く
6.C-c C-lでREPLにロード
7.REPLから関数とか呼び出してテスト。まずかったら*.lispをいじる。
8.いじったらまたC-c C-lでロード・・・後は繰り返し。

slimeショートカット

他にもあるのでM-x describe-mode でたまに確認すること。

C-c RET slime-macroexpand-1
そのまま。マクロの展開型を表示

C-c TAB slime-complete-symbol
入力補完(C-c C-i → 選ぶ TAB とするのがいい)

C-c C-s slime-complete-form
formのテンプレートを展開

C-c C-l slime-load-file
ファイルをREPLにロード

C-c C-t slime-toggle-trace-fdefinition
(trace xxx)、(untrace xxx)のショートカット

C-c C-u slime-undefine-function
関数定義を消す

C-c I slime-inspect
変数の中を見れる

M-. - Edit the definition of the function called at point.
M-, - Pop the definition stack to go back from a definition.
よくわからん。標準の関数定義には飛べる(ソースもインストールしてれば)

PythonのREPL

emacs22についてるpython-modeでの話。

1.emacsを起動
 *.pyを開く
pyにそのままコードを書くと日本語をファイルに書くとエラーになる。
ファイルの先頭で
# -*- coding:utf-8 -*-
見たいに文字コードを指定すればオケ
2.M-x run-python
3.C-x 2で画面わけて一つは*.pyもう一つは*Python*にする
4.*.pyに色々と書く
5.C-c C-lで*Python*にロード
6.*Python*から関数とか呼び出してテスト。
*Python*から直接pyに書いた関数を呼べないみたい。
モジュール名で修飾してモジュール名.関数名で呼ぶ。
(モジュール名はpyファイル名、、、みたい)
めんどうだったら*Python*でfrom モジュール名 import * (or 関数名,関数名,...)
ってすればモジュール名は省略できる。
7.まずかったら*.pyをいじる。
8.いじったらまたC-c C-lでロード・・・後は繰り返し。

python-modeショートカット
M-TAB python-complete-symbol
入力補完

C-c C-l .. C-c RET python-load-file
ファイルのロード

C-c C-v .. C-c C-w python-check
pycheckerを動かす

C-c TAB python-find-imports
モジュールの補完、、、かなぁ。

RubyのREPL

使ったのはruby1.9。あえて1.9で。

1.emacsを起動
2.*.rbを開く
3.M-x run-ruby(C-c C-sでもオケ)
4.ruby1.9だけいれてるんだけど、run-rubyするとirbがないって起動に失敗する
sudo ln -s /usr/bin/irb1.9 /usr/bin/irb
sudo ln -s /usr/bin/ruby1.9 /usr/bin/ruby
シンボリックリンクはった。
5.C-x 2で画面わけて一つは*.rbもう一つは*ruby*にする
6.*.rbに色々と書く
7.C-c C-lで*ruby*にロード
8.*ruby*から関数とか呼び出してテスト。まずかったら*.rbをいじる。
いじったらまたC-c C-lでロード・・・後は繰り返し。

ruby-modeショートカット

C-c C-e ruby-insert-end
C-c C-l ruby-load-file
C-c C-s run-ruby