Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-06-16

KMRCLを眺める(164) CL-VARIABLES

| 14:05 | KMRCLを眺める(164) CL-VARIABLES - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(164) CL-VARIABLES - わだばLisperになる

functions.lispも終了したので、今回からは、KMRCLのsymbols.lisp眺めることにしました。

ということで、symbols.lispから CL-VARIABLES です。

定義を眺める限りでは、CLパッケージの中から変数が束縛されたシンボルを抜き出すもののようです。

(defun cl-variables ()
  (let ((vars '()))
    (do-symbols (s 'common-lisp)
      (multiple-value-bind (sym status)
          (find-symbol (symbol-name s) 'common-lisp)
        (when (and (or (eq status :external)
                       (eq status :internal))
                   (boundp sym))
          (push sym vars))))
    (nreverse vars)))

動作は、

(KL:CL-VARIABLES)
;⇒ 
(*ERROR-OUTPUT* CALL-ARGUMENTS-LIMIT *PRINT-BASE* MOST-NEGATIVE-SINGLE-FLOAT
 *LOAD-PRINT* *GENSYM-COUNTER* BOOLE-ANDC1 BOOLE-C2 LEAST-NEGATIVE-SINGLE-FLOAT
 ARRAY-TOTAL-SIZE-LIMIT LONG-FLOAT-EPSILON *PRINT-RADIX* *PRINT-CASE*
 LEAST-POSITIVE-NORMALIZED-SHORT-FLOAT ARRAY-RANK-LIMIT +
 LEAST-POSITIVE-DOUBLE-FLOAT *** MOST-NEGATIVE-LONG-FLOAT DOUBLE-FLOAT-EPSILON
 * *LOAD-VERBOSE* CHAR-CODE-LIMIT LEAST-NEGATIVE-LONG-FLOAT
 MOST-POSITIVE-LONG-FLOAT BOOLE-AND BOOLE-ORC2 MOST-NEGATIVE-FIXNUM
 *PRINT-CIRCLE* *RANDOM-STATE* INTERNAL-TIME-UNITS-PER-SECOND *STANDARD-INPUT*
 *COMPILE-FILE-TRUENAME* NIL PI MOST-POSITIVE-DOUBLE-FLOAT
 LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOAT SINGLE-FLOAT-NEGATIVE-EPSILON
 *QUERY-IO* LEAST-NEGATIVE-NORMALIZED-SHORT-FLOAT *LOAD-PATHNAME*
 LEAST-NEGATIVE-SHORT-FLOAT DOUBLE-FLOAT-NEGATIVE-EPSILON BOOLE-NAND
 *PRINT-ARRAY* T *PRINT-LEVEL* *PRINT-GENSYM* MOST-NEGATIVE-SHORT-FLOAT
 BOOLE-C1 *PACKAGE* /// BOOLE-XOR *DEBUG-IO* / +++ // BOOLE-IOR
 LAMBDA-LIST-KEYWORDS MOST-POSITIVE-FIXNUM ** *LOAD-TRUENAME*
 LEAST-POSITIVE-LONG-FLOAT *PRINT-LINES* SINGLE-FLOAT-EPSILON
 LAMBDA-PARAMETERS-LIMIT MOST-POSITIVE-SINGLE-FLOAT *PRINT-LENGTH*
 SHORT-FLOAT-EPSILON *FEATURES* MULTIPLE-VALUES-LIMIT *COMPILE-VERBOSE*
 *COMPILE-PRINT* MOST-NEGATIVE-DOUBLE-FLOAT *READTABLE* *READ-SUPPRESS*
 *PRINT-RIGHT-MARGIN* *MODULES* LEAST-NEGATIVE-DOUBLE-FLOAT
 SHORT-FLOAT-NEGATIVE-EPSILON BOOLE-NOR - BOOLE-ANDC2 *TRACE-OUTPUT*
 *STANDARD-OUTPUT* LEAST-POSITIVE-SINGLE-FLOAT
 LEAST-POSITIVE-NORMALIZED-LONG-FLOAT LEAST-POSITIVE-SHORT-FLOAT BOOLE-2
 LONG-FLOAT-NEGATIVE-EPSILON BOOLE-SET LEAST-POSITIVE-NORMALIZED-SINGLE-FLOAT
 LEAST-NEGATIVE-NORMALIZED-LONG-FLOAT *PRINT-PRETTY* *PRINT-PPRINT-DISPATCH*
 BOOLE-EQV *PRINT-ESCAPE* *PRINT-MISER-WIDTH* *READ-BASE* *PRINT-READABLY*
 *COMPILE-FILE-PATHNAME* ARRAY-DIMENSION-LIMIT *DEBUGGER-HOOK*
 MOST-POSITIVE-SHORT-FLOAT LEAST-NEGATIVE-NORMALIZED-DOUBLE-FLOAT BOOLE-1
 *READ-DEFAULT-FLOAT-FORMAT* ++ *READ-EVAL* BOOLE-ORC1
 LEAST-POSITIVE-NORMALIZED-DOUBLE-FLOAT *TERMINAL-IO* *MACROEXPAND-HOOK*
 *DEFAULT-PATHNAME-DEFAULTS* BOOLE-CLR *BREAK-ON-SIGNALS*)

といったところ。

上のコードを眺めていて、CLパッケージが他を継承していることなんてあるんだろうかと、SBCL/Allegro CL/CCL/XCL/CLISPで CLパッケージ内の :INHERITED を探してみましたが

(let ((vars '()))
  (do-symbols (s 'common-lisp)
    (multiple-value-bind (sym status)
        (find-symbol (symbol-name s) 'common-lisp)
      (when (and (eq status :INHERITED)
                 (boundp sym))
        (push sym vars))))
  (nreverse vars))
;⇒ NIL

でした。

処理系が処理系依存の(CL標準でない)シンボルをCLパッケージにどっかから(CL-INTERNALとかから)継承していたら、:INHERITEDなシンボルがあったりするんでしょうか。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20100616