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))
リンク集
日本語サイト
英語リファレンス
本
View on github | Report issue