[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bep] weather



Koichi INOUE writes:

> lambda()の方は実はよく分かってません。(^^;)

lambda は defun とほとんど同じですが、一時的に使うだけなので名前を付け
る必要のない関数を作るときに使います。本当のことを言うと lambda の方が
本質的で、defun というのはシンボル名に lambda 式を割り当てているだけだ
とも言えます。

(defun muimi (x y) (+ (* x 2) y))
==> muimi

(muimi 3 5)
==> 11

(symbol-function 'muimi)
==> (lambda (x y) (+ (* x 2) y))

ですから (muimi 3 5) の muimi を (lambda (x y) (+ (* x 2) y)) で置き換
えても

((lambda (x y) (+ (* x 2) y)) 3 5)
==> 11

と同じ結果が得られます。

また、function は quote とほとんど同じです。

(symbol-function (function muimi))
==> (lambda (x y) (+ (* x 2) y))

ただ、一般のシンボルには quote を、関数名には function を使った方が、
バイトコンパイルした時の効率が上がります。

反対に、

...
(function (lambda () ... ))
...

となっている部分を

...
'my-function
...

(defun my-function () ...)

と書き直すこともできます。

-- 
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/