GitHub

FromSchemeToCommonLisp

Schemeを知ってる人がCommon Lispを書くときにハマりがちな罠について。随時追記。

{{toc_here}}

処理系

2chのCLスレのテンプレに詳しい。SBCLかClispが定番?

関数と変数

CLでは関数と変数は名前空間が別です。Schemeでは「fooという関数」は「fooという変数に関数が入っている」のと同じですが、 CLでは「関数foo」と「変数foo」を同時に使うことができます。

これに関連した罠がいくつか。

関数を渡したいときは「#'」を付ける

Scheme:

(sort '(1 2 3) >)

CL:

(sort '(1 2 3) #'>)

無名関数には「#'」を付ける

そーいうもんだと覚えましょう。 Scheme:

(sort '(1 2 3) (lambda (x y) (> x y)))

CL:

(sort '(1 2 3) #'(lambda (x y) (> x y)))

map -> mapcar

Schemeでいうmapはmapcarです。CLのmapはまだ別の挙動なので注意。

Scheme:

(map (lambda (x) (* x x)) '(1 2 3))

CL:

(mapcar #'(lambda (x) (* x x)) '(1 2 3))

リンク集

日本語サイト

英語リファレンス

source: FromSchemeToCommonLisp.hd
View on github | Report issue