[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 メーリングリストの案内