2010-06-16 [長年日記]

Emacs Lispのlambda

久しぶりにEmacs Lispを書いたら、基本的なところではまったのでちょっとメモ。

lambdaで匿名関数を作ったときに、

((lambda (x y) (+ x y)) 1 2)

と呼べるのに、

(setq f (lambda (x y) (+ x y)))
(f 1 2)

で呼べずにはまります。呼び出すには、

(funcall f 1 2)

とする必要があります。変数と関数の名前空間にあるように、値と関数は別に束縛されるそうです。いまどきそれはないだろうという気がしますが、今更どうしようもないのでしょう。

ついでに、lambdaを使うときに、

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

とするべきなのか、

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

とするべきなのか、

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

とするべきなのか悩むところだったのですが、functionの役割りによると、lambda自体が(function (lambda ...))に展開されるマクロになっているそうなので、何も付けないのがお勧めだそうです。

[]

トップ «前の日記(2010-05-22) 最新