導入してみる

ちょっと Common LISP を触ってみることにしました。 format と loop と CLOS とマクロと Prolog と disassemble を学ぶのが目標。

とりあえず Hello, world! を適当に書いてみる。

i@u ~/test/lisp> cat hello.l
(print "Hello, world!")
i@u ~/test/lisp> sbcl hello.l
This is SBCL 0.9.14, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
*

sbcl --help するもよくわからず、 sbcl -help | lv とかすると端末がものすごいことになった。さようなら SBCL

いやこんなあっさり諦めると最近の若者はキレやすいとか言われそうなのだけど、一応対話環境で (+ 3 2) とかやって 5 とか出たとかはやっていて、 (add 2 3) とかやった時によくわからんデバッガとか動いてエラーメッセージが 25 行くらい出て、その上でこの仕打ちなのであーこれはよくわからんと思って放棄したのでした。

んで、世の中 Hello world 動かすのがむずかしい処理系って結構あるよなーとか思った。何もしないプログラムも結構むずかしかったりするので、最初に書くのは無限ループするプログラムとかにするといいんじゃないかとか思った。とか思ってから Haskell だとどう書くんだろう main=main かなーと思ったらそれであってたみたい。んで、この型どうなってるねんと気になった。

*Main> :t main
main :: t

あたりまえっちゃあたりまえだけど IO () じゃないらしい。 OCaml だと、

# let rec f () = f ();;
val f : unit -> 'a = <fun>

ふむ。まぁ予想通りなんにせよ総称な感じなわけだ。未だに型とかよくわからんなぁ。型推論ってよーわからん型があったら使われ方とかから演繹するわけだよね。んで f の型なんてコンパイルしようが何しようがわからんまんまなわけだけど、それでもいいのかーというような。

まぁどうでもいいので、いいかげん Common Lisp に戻る。

i@u ~/test/lisp> clisp hello.l

"Hello, world!"

こんにちは clisp

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h