2007/12/12

Common Lisp のシンボルの美しさについて

Common Lisp のシンボル(Symbol)は次の属性を持っています。


  • 名前: symbol-name

  • ホームパッケージ: symbol-package

  • プロパティリスト: symbol-plist

  • 値: symbol-value

  • 関数: symbol-function


(defvar sym 'あたい)

(defun sym ()
'関数)

(setf (get 'sym 'キー1) '値1)

(macrolet ((p (&body body)
`(progn ,@(mapcar #'(lambda (arg)
`(format t "~30a ; => ~a~%" ',arg ,arg))
body))))
(p sym
(sym)
(get 'sym 'キー1)
(symbol-name 'sym)
(symbol-package 'sym)
(symbol-plist 'sym)
(symbol-value 'sym)
(symbol-function 'sym)))

シンボル sym は変数であり関数でありプロパティリストであり、自分の名前とパッケージを知っています。
Common Lisp のシンボルはこのようにきちんとした構造を持った一つのオブジェクトなのです。
そして、Lisp ではこのようなシンボルを変数のように使います。
他の言語の変数は、それ自体では実態がなく、他の何かの参照のようなものです。
しかし Lisp の変数は、シンボルというオブジェクトです。
これは Lisp の美しさの一つだと思います。
他の言語の変数が何か特殊でいびつなもののように思えます。
I love Common Lisp.

0 件のコメント: