;;;
;;; 21 大規模開発に向けて:パッケージとシンボル
;;;
;; 21.1 読取器はパッケージをどうやって使うか
*package* ;#<The COMMON-LISP-USER package>
(find-symbol "CAR") ;CAR, :INHERITED
(find-symbol "CAR" (find-package "COMMON-LISP"))
;CAR, :EXTERNAL
(find-symbol "car") ;NIL, NIL
(find-symbol "PIYO") ;NIL, NIL
(intern "PIYO") ;PIYO, NIL
(find-symbol "PIYO") ;PIYO, :INTERNAL
(eql ':foo :foo) ;T
(symbol-name :foo) ;"FOO"
(eql '#:foo '#:foo) ;NIL
(symbol-name '#:foo) ;"FOO"
(symbol-package '#:foo) ;NIL
(defparameter *pair-1* (cons '#:foo (intern "FOO")))
(defparameter *pair-2* (cons '#:foo (intern "FOO")))
(eql *pair-1* *pair-2*) ;NIL
(equal *pair-1* *pair-2*) ;NIL
(equal (car *pair-1*) (car *pair-2*)) ;NIL
(eql (car *pair-1*) (car *pair-2*)) ;NIL
(eql (cdr *pair-1*) (cdr *pair-2*)) ;T
(setf (symbol-value (car *pair-1*)) 1) ;1
(symbol-value (car *pair-1*)) ;1
(defparameter *a* '#:foo)
(type-of *a*) ;SYMBOL
(symbol-value *a*) ;Error: Attempt to take the value of the unbound variable `#:FOO'.
(setf (symbol-value *a*) 10)
(symbol-value *a*) ;10
(defparameter *b* *a*)
(symbol-value *b*) ;10
(gensym) ;#:G7
;; 21.2 パッケージとシンボルの用語をいくつか
;; 特になし。
;; 21.3 3つの標準パッケージ
*package* ; #<The COMMON-LISP-USER package>
common-lisp:*package* ; #<The COMMON-LISP-USER package>
cl:*package* ; #<The COMMON-LISP-USER package>
:a ;:A
keyword:a ;:A
(eql :a keyword:a) ;T
;; 21.4 自分でパッケージを定義する
(defpackage :util.aka
(:use :common-lisp))
excl::*package-table*
(in-package :util.aka)
;; 21.5 再利用可能なライブラリのパッケージ化
(defpackage :util.aka
(:use :common-lisp)
(:export :open-db
:save
:store))
;; 21.6 個別の名前をインポートする
;; On REPL
(in-package :util.aka)
(asdf:operate 'asdf:load-op :cxml)
(defpackage :util.aka
(:use :common-lisp)
(:import-from :cxml :parse))
(find-symbol "PARSE") ;PARSE, :INTERNAL
(defpackage :util.aka
(:use :common-lisp :cxml)
(:shadow :parse))
;; 21.7 パッケージ化の定石
;; 特になし
;; 21.8 パッケージの悩みどころ
;; 特になし
こつこつ。
0 件のコメント:
コメントを投稿