Special-Operator LOCALLY

UP


Special-Operator LOCALLY

Special Operator LOCALLY

構文

locally declaration* form* => result*

引数と戻り値

declaration - 宣言式。評価されません。
form - 暗黙のprogn
result - formの返却値

定義

与えられたdeclarationの効果があるレキシカル環境下で、 一連のformのボディ部を評価します。

例文

(defun sample-function (y)  ;このyはspecialと見なされる
  (declare (special y))                                
  (let ((y t))              ;このyはレキシカルと見なされる
    (list y
          (locally (declare (special y))
            ;; この次のyはspecialと見なされる
            y))))
=>  SAMPLE-FUNCTION
(sample-function nil) =>  (T NIL) 
(setq x '(1 2 3) y '(4 . 5)) =>  (4 . 5)

;;; 下記の宣言は特に使いやすい指定ではありません。
;;; これらはただLOCALLYを使った正しい宣言の構文の例です。
(locally (declare (inline floor) (notinline car cdr))
         (declare (optimize space))
   (floor (car x) (cdr y))) =>  0, 1
;;; この例はlocally定義による特定のOPTIMIZEの設定を持った
;;; 関数定義の例を示したものです。
(locally (declare (optimize (safety 3) (space 3) (speed 0)))
  (defun frob (w x y &optional (z (foo x y)))
    (mumble x y z w)))
=>  FROB

;;; これは前回の例と同じですが、最適化の設定がその後に続く
;;; 同じコンパイルユニット内の定義に有効であることが違っています。
(declaim (optimize (safety 3) (space 3) (speed 0)))
(defun frob (w x y &optional (z (foo x y)))
  (mumble x y z w))
=>  FROB

副作用

なし。

影響

なし。

例外

なし。

参考

declare

備考

locallyspecial宣言の使用は、 変数の束縛ではなく変数への参照に影響します。

もしlocallyフォームがトップレベルフォームであれば、 form本体もまたトップレベルフォームとして処理されます。 3.2.3. ファイルのコンパイルをご確認ください。


TOP, Github