[mew-dist 21563] Re: s/function/'/

KOIE Hidetaka ( 鯉江英隆 ) hide at example.com
2002年 8月 29日 (木) 11:08:22 JST


  Message-Id: <20020828.211708.50021234.kazu at example.com>
  Date:       Wed, 28 Aug 2002 21:17:08 +0900 (JST)
  From:       Kazu Yamamoto (山本和彦) <kazu at example.com>
  Subject:    [mew-dist 21558] Re: s/function/'/

  | function (or #') でクオートして意味があるのは、lambda で始まる匿名変数
  | で、しかも funcall/mapcar/sort などと一緒に使われない場合だけです。

実験しました

;; lambdaもバイトコンパイルされる
;; これは当然だが quote しなくてもいいのはなぜか。
(disassemble 
 (byte-compile-sexp
  (defun xxx(ls)
    (mapcar (lambda (x) (* x 3)) ls))))

;; lambdaもバイトコンパイルされる
;; mapcarの1st引数はfuncだと知っているから
(disassemble 
 (byte-compile-sexp
  (defun xxx(ls)
    (mapcar (quote (lambda (x) (* x 3))) ls))))

;; lambdaはリストのまま
;; mapcarとちがってFUNの引数についての情報を持ってないから
(disassemble 
 (byte-compile-sexp
  (defun xxx(ls)
    (FUN (quote (lambda (x) (* x 3))) ls))))

;; 明示的にfuncだと教えるとバイトコンパイルされる
(disassemble 
 (byte-compile-sexp
  (defun xxx(ls)
    (FUN (function (lambda (x) (* x 3))) ls))))

どうでもいいことですが
Makefileで生成するtemp.elにfunction()が含まれてました。

--
KOIE Hidetaka 鯉江英隆 <hide at example.com>

PS
(* 2 x) よりも (+ 2 2) の方がよいコードが生成される。



Mew-dist メーリングリストの案内